我想沿着由点列表定义的路径绘制一个管子。
我的想法是,我基本上可以围绕我的每个点画圈,然后使用 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 数学的初学者。