OpenGL - 使用glm绕2轴旋转

时间:2017-02-24 17:42:11

标签: opengl rotation glm-math

我使用以下代码创建了2个我希望旋转的柱面:

glm::vec3 randVec3 = { 1.0f, 0.0f, 0.0f };
glm::vec3 randVec4 = { 0.0f, 1.0f, 0.0f };
d_tfms[i] = glm::rotate(90.0f, randVec3 );
d_tfms[i] = glm::rotate(10.0f, randVec4);

d_tfms[i]是一个4x4矩阵,然后作为ModelView矩阵传输到顶点着色器。

在旋转之前,这是我的圆柱体的样子: (忽略其他形状,圆柱体显示为空心 2D圆圈)

enter image description here

第一次旋转后(x轴为90度):

enter image description here

第二次旋转后(y轴为10度):

enter image description here

如您所见,这些轮换没有意义。 特别是,如果你看第一张图像和第二张图像中的深蓝色圆柱体,它似乎不会围绕它自己的局部x轴旋转。

可能是什么问题?

2 个答案:

答案 0 :(得分:1)

好的,回答你关于如何混合2个旋转的问题,只需将它们相乘(注意:矩阵乘法是 Not 可交换,因此matrixA * matrixB与matrixB * matrixA不同): d_tfms [i] = glm :: rotate(10.0f,randVec4)* glm :: rotate(90.0f,randVec3);

ps,你可以为这两个函数提供第一个参数,这是(在这种情况下)一个单位矩阵(glm :: mat4(1.0))  即:d_tfms [i] = glm :: rotate(glm :: mat4(1.0),10.0f,randVec4)* glm :: rotate(glm :: mat4(1.0),90.0f,randVec3);

答案 1 :(得分:0)

d_tfms [i] = glm :: rotate(10.0f,randVec4);

这对我不起作用......你有最新版本的glm吗?

glm :: rotate函数有3个参数:

  • 一个4x4矩阵,可以是单位矩阵或转置矩阵(记住乘法顺序);
  • 旋转角度;
  • 一个vec3,用于指出要旋转的轴;

尝试使用(至少确保你是否相应地旋转):

tfms[i] = glm::rotate(tfms[i],glm::radians(90.0f),randVec4);