圆柱算法

时间:2011-11-05 22:44:10

标签: c++ opengl

我正在尝试在OpenGl中绘制一个圆柱体。我找到了这个算法,但我无法理解它。

http://paulbourke.net/miscellaneous/sphere_cylinder/

“给定两个垂直向量A和B,可以在圆柱体的每个边缘周围创建顶点。因此,对于4个顶点面,顶点可能由下面给出,其中θ2-theta1是一个适当的小角度,决定了近似的粗糙度。“

我怎样才能找到A和B?我正在使用glm。可以计算交叉产品吗?

4 个答案:

答案 0 :(得分:2)

A和B形成正交(precalrably orthonormal),笛卡尔2D坐标系的基础。把它们想象成X和Y轴。回想一下,圆的参数方程是

p(t) = r (X cos(t) + Y sin(t))

现在用A,B替换X和Y,你得到了圆柱体圆形截面的公式。为了使其成为圆柱体,通过垂直于A和B的矢量挤出,即C = A×B

p(s, t) = s * C + r (A cos(t) + B sin(t))

答案 1 :(得分:1)

答案有几个字符串:

  

有许多方法可以创建这两个向量,它们通常需要形成任何不与圆柱轴共线的向量。该矢量与圆柱轴(P2-P1)的叉积给出了一个矢量(A说),将该新矢量的叉积与轴给出另一个矢量(B)。然后将这两个垂直向量归一化。

让我们一步一步走:

  1. 使用圆柱轴向量创建任何不共线。
  2. 使用圆柱轴找到此向量的叉积。交叉乘积的结果是称为向量A的向量。
  3. 求向向量A与圆柱轴的叉积得到向量B
  4. 规范化血管A和B
  5. 有关跨产品的更多信息,请参阅here

答案 2 :(得分:0)

是的,glm可以构建跨产品矩阵,请参阅GLM APIglm::gtx::matrix_cross_product::matrixCross3glm::gtx::matrix_cross_product::matrixCross4)。

答案 3 :(得分:0)

我在C#中为Unity3D创建了一个模块,它可以在程序上创建一个圆柱体,并允许您调整其参数。您应该能够轻松转换为C ++,因为几何计算在任何地方都是相同的,我想认为代码很容易理解:)观看video以查看它的内容并从{下载代码{3}}