glm::perspective 中改变角度反映物体
Changing the angle in glm::perspective reflects the object
我在屏幕上画了 2 个立方体,我意识到当我改变透视矩阵中的角度时我的对象表现得很奇怪,这是我的代码
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(programID);
GLuint mvp = glGetUniformLocation(programID, "MVP");
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 10.0f);
glm::mat4 translate = glm::translate(glm::mat4(1.0f), vec3(-2.0f, 0.0f, -5.0f));
glm::mat4 rotate = glm::rotate(glm::mat4(1.0f), 54.0f, vec3(-1.0f, 0.0f, 0.0f));
glm::mat4 MVP = Projection * translate * rotate;
glUniformMatrix4fv(mvp, 1, GL_FALSE, &MVP[0][0]);
glDrawElements(GL_TRIANGLES, numOfIndices, GL_UNSIGNED_SHORT, nullptr);
translate = glm::translate(glm::mat4(1.0f), vec3(3.0f, 0.0f, -6.0f));
rotate = glm::rotate(glm::mat4(1.0f), 54.0f, vec3(0.0f, 1.0f, 0.0f));
MVP = Projection * translate * rotate;
glUniformMatrix4fv(mvp, 1, GL_FALSE, &MVP[0][0]);
glDrawElements(GL_TRIANGLES, numOfIndices, GL_UNSIGNED_SHORT, nullptr);
2 个立方体共享相同的投影矩阵,但不同的 t运行slate 和旋转矩阵。这是我的着色器
#version 430
in layout(location=0) vec3 position;
in layout(location=1) vec3 color;
uniform mat4 MVP;
out vec3 theColor;
void main(){
gl_Position = MVP * vec4(position,1.0f);
theColor = color;
}
着色器只是将 MVP 矩阵乘以位置顶点。当我 运行 透视矩阵中度数为 45.0f 的代码时,我得到了这个:
然后当我 运行 它与 55.0f 我得到这个:
好像我从物体后面看,当我做 50.0f 时它关闭了,我只能看到其中一个立方体的角。
好吧,我明白了,glm::perspective 将弧度作为第一个参数,所以我应该写 (3.14f/180.0f) * 45.0f 而不仅仅是 45.0f
我在屏幕上画了 2 个立方体,我意识到当我改变透视矩阵中的角度时我的对象表现得很奇怪,这是我的代码
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(programID);
GLuint mvp = glGetUniformLocation(programID, "MVP");
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 10.0f);
glm::mat4 translate = glm::translate(glm::mat4(1.0f), vec3(-2.0f, 0.0f, -5.0f));
glm::mat4 rotate = glm::rotate(glm::mat4(1.0f), 54.0f, vec3(-1.0f, 0.0f, 0.0f));
glm::mat4 MVP = Projection * translate * rotate;
glUniformMatrix4fv(mvp, 1, GL_FALSE, &MVP[0][0]);
glDrawElements(GL_TRIANGLES, numOfIndices, GL_UNSIGNED_SHORT, nullptr);
translate = glm::translate(glm::mat4(1.0f), vec3(3.0f, 0.0f, -6.0f));
rotate = glm::rotate(glm::mat4(1.0f), 54.0f, vec3(0.0f, 1.0f, 0.0f));
MVP = Projection * translate * rotate;
glUniformMatrix4fv(mvp, 1, GL_FALSE, &MVP[0][0]);
glDrawElements(GL_TRIANGLES, numOfIndices, GL_UNSIGNED_SHORT, nullptr);
2 个立方体共享相同的投影矩阵,但不同的 t运行slate 和旋转矩阵。这是我的着色器
#version 430
in layout(location=0) vec3 position;
in layout(location=1) vec3 color;
uniform mat4 MVP;
out vec3 theColor;
void main(){
gl_Position = MVP * vec4(position,1.0f);
theColor = color;
}
着色器只是将 MVP 矩阵乘以位置顶点。当我 运行 透视矩阵中度数为 45.0f 的代码时,我得到了这个:
然后当我 运行 它与 55.0f 我得到这个:
好像我从物体后面看,当我做 50.0f 时它关闭了,我只能看到其中一个立方体的角。
好吧,我明白了,glm::perspective 将弧度作为第一个参数,所以我应该写 (3.14f/180.0f) * 45.0f 而不仅仅是 45.0f