GLM:旋转矩阵初始化
GLM: rotation matrix initialisation
我的代码的基本目的只是围绕 z 轴旋转几个点。但是,在尝试使用 glm::rotate(m4, a, v3) 初始化旋转矩阵并尝试检查其组件后,快速 printf 为每个元素输出一些 1 800 000 000.0000000...。我认为这不是正确的功能。~
注意:我不是询问空间变换背后的数学。他们对我来说很清楚。
本质代码:
int main(int argc, char **argv){
InitGL(); // openGL, GLFW..
CreateShaders(); // vertShader: "mat4 trans"-uniform
GenerateTextures();
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
uniTrans = glGetUniformLocation(shaderProgram, "trans");
glm::mat4 trans;
while(!glfwWindowShouldClose(window)){
glClear(GL_COLOR_BUFFER_BIT);
trans = glm::rotate(trans, glm::radians(180.0f), glm::vec3(0.0f, 0.0f, 1.0f));
glUniformMatrix4fv(uniTrans, 1, GL_FALSE, glm::value_ptr(trans));
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glfwSwapBuffers(window);
glfwPollEvents();
}
CleanUp();
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
程序在不使用旋转矩阵时按预期工作。使用 printf("%f", m[0][0]) 等检查矩阵值。关于从哪里开始的任何想法?没有错误甚至警告被抛出。
自答:
必须初始化矩阵:
glm::mat4 trans(1.0f);
结果为单位矩阵。
我的代码的基本目的只是围绕 z 轴旋转几个点。但是,在尝试使用 glm::rotate(m4, a, v3) 初始化旋转矩阵并尝试检查其组件后,快速 printf 为每个元素输出一些 1 800 000 000.0000000...。我认为这不是正确的功能。~
注意:我不是询问空间变换背后的数学。他们对我来说很清楚。
本质代码:
int main(int argc, char **argv){
InitGL(); // openGL, GLFW..
CreateShaders(); // vertShader: "mat4 trans"-uniform
GenerateTextures();
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
uniTrans = glGetUniformLocation(shaderProgram, "trans");
glm::mat4 trans;
while(!glfwWindowShouldClose(window)){
glClear(GL_COLOR_BUFFER_BIT);
trans = glm::rotate(trans, glm::radians(180.0f), glm::vec3(0.0f, 0.0f, 1.0f));
glUniformMatrix4fv(uniTrans, 1, GL_FALSE, glm::value_ptr(trans));
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glfwSwapBuffers(window);
glfwPollEvents();
}
CleanUp();
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
程序在不使用旋转矩阵时按预期工作。使用 printf("%f", m[0][0]) 等检查矩阵值。关于从哪里开始的任何想法?没有错误甚至警告被抛出。
自答:
必须初始化矩阵:
glm::mat4 trans(1.0f);
结果为单位矩阵。