我的想法是基本上绕着每个点画圆,然后使用GL_QUAD_STRIP将圆上的点连接起来。
因此,我创建圆上的点的代码类似于:
point_of_circle[0] = pathVertices[i][0] + TUBE_RADIUS * cos(j/TUBE_SEGMENTS * 2*M_PI));
point_of_circle[1] = pathVertices[i][1] + TUBE_RADIUS * sin(j/TUBE_SEGMENTS * 2*M_PI));
point_of_circle[2] = pathVertices[i][2];
其中i
是路径顶点的索引(即我想要绘制管道的原始点之一),j
是正在创建的圆的当前点的索引(它从0到TUBE_SEGMENTS
)。
现在问题是,如果我以这种方式创建圆,它们总是朝着同一个方向(圆都是“平行”的,因为我总是执行point_of_circle[2] = pathVertices[i][2]
),这不是我想要的,因为结构看起来不像一个合适的管道。
我想到的是计算沿着我正在绘制的路径切线的向量。然后,我需要以某种方式使圆面对根据计算出的切线的正确方向。
例如,如果计算出的切线是0,0,1
,则代码应保持不变。但是,如果计算出的切线为其他任何值,则应旋转圆。
例如,如果计算出的切线为0,1,0
,则整个圆的y坐标应相同,如果您沿z轴观察,则应仅看到圆的水平段。
如果切线为1,0,0
,则如果沿z轴观察,则应看到圆的垂直段。
我该如何编写代码,根据计算出的切线正确创建圆?希望我的解释足够清楚,我是OpenGL和大多数3D数学的初学者。