我使用以下代码创建了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圆圈)
第一次旋转后(x轴为90度):
第二次旋转后(y轴为10度):
如您所见,这些轮换没有意义。 特别是,如果你看第一张图像和第二张图像中的深蓝色圆柱体,它似乎不会围绕它自己的局部x轴旋转。
可能是什么问题?
答案 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个参数:
尝试使用(至少确保你是否相应地旋转):
tfms[i] = glm::rotate(tfms[i],glm::radians(90.0f),randVec4);