围绕任意轴旋转平面2d对象

时间:2013-07-23 09:30:32

标签: c++ opengl vector matrix

所以我有一个平坦的2d多边形,我想围绕由两个2d点定义的轴旋转多边形的每个点。这些旋转点稍后用于从平面2d多边形生成3d旋转对象。 所以我现在得到了这个:

  1. 计算一个多边形点的轴法线位置。
  2. 从这一点开始,我使用matrixLookAt(pointOnLine,polygonPoint,upVec)函数计算矩阵
  3. 然后我以45°
  4. 旋转Z轴上的矩阵
  5. 最后我将polygonPoint与计算矩阵相乘。
  6. 但是使用这种方法我没有得到任何有用的结果。

    为了更好的解释: P1& P2定义轴 Psrc是polygonPoint 和Pdest是3d的最后一点 enter image description here

1 个答案:

答案 0 :(得分:4)

更容易完成。只需在使用glRotatef()绘图之前修改模型矩阵:

glRotatef(angle, vx, vy, vz);
  • angle显然是角度。
  • vxvyvz是定义旋转轴的矢量。

或者,使用它给出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