如何在 glRotatef 中使用 glm::mat4
How to use a glm::mat4 in a glRotatef
在现代 OpenGL 中,我会像这样平移、旋转、缩放等:
m_cart.orientation = glm::mat4(glm::mat3(m_cart.T, m_cart.N, m_cart.B));
modelViewMatrixStack.Push();
modelViewMatrixStack.Translate(m_cart.position);
modelViewMatrixStack *= m_cart.orientation;
modelViewMatrixStack.Scale(0.01f);
m_cart.Render();
modelViewMatrixStack.Pop();
但现在由于我无法控制的原因,我不得不使用一些旧的 OpenGL,并且我已将代码更改为如下所示:
glPushMatrix();
glTranslatef(m_cart.position.x, m_cart.position.y, m_cart.position.z);
glScalef(0.01f, 0.01f, 0.01f);
m_cart.Render();
glPopMatrix();
以上内容几乎相同,但我不知道如何使用 glm::mat4
应用旋转。 glRotatef
想要一个角度并为 xyz 浮动。我查看了 `glm::decompose´ 以将它们从 4x4 矩阵中取出,但不是很清楚。
可能吗?
您无法通过单个 glRotate
设置任意方向。您最多需要旋转 3 次。
但是没有必要旋转矩阵,因为您已经知道最终的方向矩阵。而不是计算glRotate
you can use glMultMatrix
的参数可以直接将m_cart.orientation
矩阵乘到矩阵栈上:
m_cart.orientation = glm::mat4(glm::mat3(m_cart.T, m_cart.N, m_cart.B));
glPushMatrix();
glTranslatef(m_cart.position.x, m_cart.position.y, m_cart.position.z);
glMultMatrixf(glm::value_ptr(m_cart.orientation));
glScalef(0.01f, 0.01f, 0.01f);
m_cart.Render();
glPopMatrix();
在现代 OpenGL 中,我会像这样平移、旋转、缩放等:
m_cart.orientation = glm::mat4(glm::mat3(m_cart.T, m_cart.N, m_cart.B));
modelViewMatrixStack.Push();
modelViewMatrixStack.Translate(m_cart.position);
modelViewMatrixStack *= m_cart.orientation;
modelViewMatrixStack.Scale(0.01f);
m_cart.Render();
modelViewMatrixStack.Pop();
但现在由于我无法控制的原因,我不得不使用一些旧的 OpenGL,并且我已将代码更改为如下所示:
glPushMatrix();
glTranslatef(m_cart.position.x, m_cart.position.y, m_cart.position.z);
glScalef(0.01f, 0.01f, 0.01f);
m_cart.Render();
glPopMatrix();
以上内容几乎相同,但我不知道如何使用 glm::mat4
应用旋转。 glRotatef
想要一个角度并为 xyz 浮动。我查看了 `glm::decompose´ 以将它们从 4x4 矩阵中取出,但不是很清楚。
可能吗?
您无法通过单个 glRotate
设置任意方向。您最多需要旋转 3 次。
但是没有必要旋转矩阵,因为您已经知道最终的方向矩阵。而不是计算glRotate
you can use glMultMatrix
的参数可以直接将m_cart.orientation
矩阵乘到矩阵栈上:
m_cart.orientation = glm::mat4(glm::mat3(m_cart.T, m_cart.N, m_cart.B));
glPushMatrix();
glTranslatef(m_cart.position.x, m_cart.position.y, m_cart.position.z);
glMultMatrixf(glm::value_ptr(m_cart.orientation));
glScalef(0.01f, 0.01f, 0.01f);
m_cart.Render();
glPopMatrix();