2011-11-05 178 views
0

我想在OpenGl中画一个圆柱体。我找到了这个算法,但我无法理解它。 。圆柱算法

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

“鉴于两个垂直矢量A和B中的一个可绕气缸的每个边缘创建顶点因此,对于4顶点面的顶点可能被给出的以下其中theta2 - theta1是一些适当的小角度决定了逼近的粗糙度。“

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

+0

在他的笔记之下他已经链接了一个C源代码文件,显示了如何去做。 – ChrisWue

+0

[我的问题在这里](http://stackoverflow.com/questions/12274863/how-to-trap-my-surface-patches-to-prevent-the-background-from-bleeding-through)有Postscript的源代码计算圆柱体上的面的顶点。 –

回答

2

A和B构成正交(优选正交)笛卡尔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)) 
0

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

1

有回答的弦数上挤出通过该载体的气缸:

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

所以让我们一步一步:

  1. 创建任何不与圆柱轴矢量共线。
  2. 找到这个向量与圆柱轴的叉积。叉积的结果被称为矢量A.矢量
  3. 查找矢量A与在向量B汽缸轴线结果叉积
  4. 规格化vetors甲乙

进一步了解交叉积可以读取here

0

我已经在C#中为Unity3D创建了一个模块,它可以通过程序创建一个圆柱体并允许您调整其参数。您应该可以轻松转换为C++,因为几何计算在任何地方都是一样的,我想这些代码很容易理解:)观看video,看看它是什么,并从GitHub下载代码。