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,测试代码:
最终效果图: