c++ - 围绕任意轴旋转平面二维对象

标签 c++ opengl vector matrix

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

  1. 计算一个多边形点的轴法线位置。
  2. 从这一点开始,我使用 matrixLookAt(pointOnLine, polygonPoint, upVec) 函数计算矩阵
  3. 然后我将矩阵在 Z 轴上旋转 45°
  4. 最后,我将 polygonPoint 与计算出的矩阵相乘。

但是用这种方法我没有得到任何有用的结果。

为了更好的理解: P1 & P2 定义轴 Psrc 是多边形点 Pdest 是 3d 中的终点 enter image description here

最佳答案

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

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

或者,在给定 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

关于c++ - 围绕任意轴旋转平面二维对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17806423/

相关文章:

c++ - 在 vb.net 中通过引用传递 const 参数

c++ - 提高 TM 模拟器的性能

c++ - 构造函数发生异常时如何释放API使用的资源?

c++ - 指向包含两个 vector 的数组的指针

c++ - 类型信息没有通过 new/malloc 传递,只有 size_t

opengl - 如何使用我自己的4x4矩阵更新opengl modelview矩阵?

c++ - 检查一个点是否在 "gluPartialDisk"内(OpenGL 和 C++)

c++ - 使用 remove_if 按索引从 C++ vector 中删除

r - 比较向量值 : 1 element with all other

简化命名类型的 C++ 语言功能(特别是在函数声明中)