Opengl在三维path上创建隧道三角形和纹理坐标

我有一条路,让一个贝塞尔或一个圆圈。

我想制作一个连续的3d柱(隧道)(R = 0.5f)

我如何计算TRIangles(TRIANGLE_STRIP)坐标,纹理坐标是否正确?

对于曲线中的每个点,您都需要正常和辅助法线,如图所示: nb在这里输入图像说明

你可以从曲线上计算正切值t ,它是一阶导数。 如果导数不可用,则可以使用从前一个采样点到下一个采样点的方向vector对其进行逼近。 Binormal只是一个正切和正常的叉积。 唯一的问题是如何定义正常。 法线可以是任意的,但是它应该始终位于“曲线的同一侧”,以使管中的相邻顶点彼此靠近而不是跳跃。 我脑海中有四种计算正常的方法。

  1. 手动定义曲线中每个控制点的法线并从中进行插值。
  2. 定义世界上的向量或类似的东西,并从上向量和正切的叉积来计algorithm向量。 在这种情况下,曲线不能直接向上。 我最近自己用这个,看起来效果不错。
  3. 任意select第一个法线,并总是计算下一个法线,以便尽可能接近前一个法线。
  4. 如果你的曲线位于一个平面,这是一个圆的情况,你可以直接使用平面法线。

当你有法线和副法线时,你可以简单地用这些向量的线性组合来生成隧道顶点。

for (i = 0; i < pointCount; i++) { angle = 2 * PI * i / pointCount; tunnelPoint[i] = curvePoint + (normal * cos(angle) + binormal * sin(angle)) * radius; } 

纹理坐标很容易计算,如果你的点是均匀分布或拉伸不成问题。 如果这是一个问题,则需要首先计算曲线的长度,然后在数值上查找曲线中任意给定点的正确纹理坐标。 这给了你的一部分。 v部分简直就是上面代码中的i / pointCount