2013-07-23 63 views
1

所以我有一個平坦的2D多邊形,我想旋轉多邊形的每個點圍繞由兩個2D點定義的軸。這些旋轉點稍後用於從平面2d多邊形生成一個3d旋轉對象。 所以我現在得到了這個:圍繞任意軸旋轉平坦的2D對象

  1. 計算一個多邊形點的軸法線位置。
  2. 從這點我計算與一個matrixLookAt(pointOnLine,polygonPoint,upVec)函數矩陣
  3. 然後我旋轉的Z軸使基質與45°
  4. 而且finaly我乘以所計算的矩陣的polygonPoint 。

但是用這種方法我沒有得到任何有用的結果。

爲了更好unterstanding: P1 P2 &所定義的軸 PSRC是polygonPoint 和Pdest是3D enter image description here

回答

4

容易得多的最後一點事情要做。使用glRotatef()繪製之前只需修改模型矩陣:

glRotatef(angle, vx, vy, vz); 
  • angle明顯的角度。
  • vx,vyvz是定義您的旋轉軸的向量。

或者,給定2點使用它:

glRotatef(p1.x - p2.x, p1.y - p2.y, p1.z - p1.z); 

如果你的旋轉軸穿過你的世界的起源不走,你就必須調整一切,讓您的軸穿過原點使用glTranslatef()

glTranslatef(-p1.x, -p1.y, -p1.z); // move one point on the vector into the origin 
glRotatef(p1.x - p2.x, p1.y - p2.y, p1.z - p1.z); // rotate everything 
glTranslatef(p1.x, p1.y, p1.z); // move everything back into position 
+0

這將繞中心的點,而不是繞軸 –

+0

嗯?你將如何圍繞另一點(中心?)旋轉一個點?通過減去兩點的座標,可以得到它們之間的矢量的尺寸,而不是中心點。去鏈接文檔的答案。 – Mario

+0

我通過創建一個在軸上的正常點上移動的矩陣來旋轉該矩陣,並將該矩陣乘以多邊形點,從而圍繞一個軸旋轉一個點。像任何CAD軟件創建一個旋轉體 –