我想沿着由点列表定义的路径绘制管道。
我的想法是,我基本上可以围绕我的每个点绘制圆圈,然后使用 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]
),这不是我想要的,因为这样结构看起来不像是一个合适的 pipe 。
我想我可以做的是计算与我正在绘制的路径相切的向量。然后,我需要根据计算的切线以某种方式使圆面向正确的方向。
例如,如果计算的切线是0,0,1
,代码应该保持原样。但是,如果将切线计算为其他任何东西,则应旋转圆。
例如,如果计算的切线是 0,1,0
,则整个圆的 y 坐标应该相同,如果您沿着 z 轴看,您应该只看到圆的水平段。
如果切线是 1,0,0
,如果沿 z 轴看,您应该会看到圆的垂直线段。
我如何编写代码来根据计算的切线正确创建圆?我希望我的解释足够清楚,我是 OpenGL 和大部分 3D 数学的初学者。
最佳答案
总是有 GLE Tubing and Extrusion Library如果你不重新发明轮子。
关于opengl - 在 OpenGL 中沿折线路径创建管,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11193524/