opengl实现任意两点间画圆柱体

来源:互联网 发布:淘宝网店认证照片 编辑:程序博客网 时间:2024/06/05 00:33

1,问题提出

两点间画线简单:

glBegin(GL_LINES);  //注意是LINES不是LINE,这个错误一定要注意。

glVertexf(x1, y1, z1);

glVertexf(x2, y2, z2);

glEnd();

画线函数不会影响opengl的矩阵堆栈。

但是很多时候线条效果会比较差,比如我要做一个骨骼动画,关节点间的骨头用线条太难看,即使使用glLineWidth设置线宽,视觉效果还是一塌糊涂。还有利用分形绘制3D树的时候,树干用线条(宽线条)绘制效果也不佳。所以此时需要实现一个函数,3D空间中任意两点间用几何体绘制,我下面介绍一种思路。

2,原理介绍

要在A(x1,y1,z1), B(x2,y2,z2)之间绘制圆柱体,首先在原点处,沿着Y轴方向完成几何体绘制,然后旋转AB向量方向,最后平移到A点处。关键在旋转矩阵的计算,使用向量叉乘:AB向量和Y轴单位向量叉乘计算出右手side向量,然后side单位化,side和AB叉乘计算出最终的up方向。

代码如下:

 

上面的代码绘制圆柱体使用了glu几何库,如果绘制其他几何体:比如四棱锥,或其它几何体,只需要修改下面的框架:

 

注意上面的renderGeometryInYAxis();必须是在Y轴上绘制几何体。

3,测试代码:

 

最终效果图: