2013-07-23 66 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软件创建一个旋转体 –