2011-11-05 101 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下載代碼。