我正在尝试沿样条线生成 3d 管。我有样条线的坐标(x1,y1,z1 - x2,y2,z2 - 等),您可以在黄色插图中看到。在这些点上,我需要生成圆,其顶点将在以后的体育场连接。圆需要垂直于样条的两条线段的“角”,以形成正确的管。请注意,出于说明目的,这些段保持较低。
[显然我不允许发布图片,所以请在此链接查看图片] http://img191.imageshack.us/img191/6863/18720019.jpg
我能够计算样条曲线每个点的每个环的顶点,但它们都在同一个平面上,即相同的角度。我需要根据他们的“腿”(例如 A 和 B 对 C)旋转它们。
我一直在思考这个问题并想到了以下几点:
- 两条线段可以看作 2 个向量(在插图 A 和 B 中)
- 角落(在 illustraton C 中)是需要计算顶点环的地方
- 我需要找到所有顶点所在的平面
- 然后我可以使用这个平面(=向量?)从中心点计算新向量,即 C
- 并使用半径 * sin 和 cos 找到它们的 x,y,z
但是,我对此的数学部分真的很困惑。我读到了点积,但它返回一个标量,我不知道在这种情况下如何应用。
有人可以指出我正确的方向吗?
[编辑] 提供有关情况的更多信息:
我需要构造一个浮点缓冲区,它以 3 个一组描述顶点位置并将由 OpenGL ES 连接,给定另一个带有索引的缓冲区以形成多边形。
为了给管子赋予形状,我首先创建了一个浮点数组,它以 3 个为一组描述了 3d 空间中的控制点。
然后连同一个用于分段密度的变量,我将这些控制点传递给一个函数,该函数使用这些控制点创建一个 CatmullRom 样条曲线,并以另一个浮点数组的形式返回它 - 再次以 3 个为一组 - 描述catmull rom 样条。
在每个顶点上,我想创建一个顶点环,其密度也可以不同(平滑度/每个环的顶点数)。
所有以前的顶点(控制点和描述 catmull rom 样条的顶点)都被丢弃。
只有形成管环的顶点才会被传递给 OpenGL,OpenGL 反过来将连接这些顶点以形成最终的管。
我能够创建 catmullrom 样条,并在其顶点的位置创建环,但是,它们都位于相同角度的平面上,而不是遵循样条路径。
[/编辑]
谢谢!