更改 glm::perspective 中的角度反映对象

Posted

技术标签:

【中文标题】更改 glm::perspective 中的角度反映对象【英文标题】:Changing the angle in glm::perspective reflects the object 【发布时间】:2016-05-11 09:05:24 【问题描述】:

我在屏幕上绘制了 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);

两个立方体共享相同的投影矩阵,但平移和旋转矩阵不同。这是我的着色器

#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 时它关闭了,我只能看到一个立方体的一角。

【问题讨论】:

【参考方案1】:

好的,我想通了,glm::perspective 将弧度作为第一个参数,所以我应该写成 (3.14f/180.0f) * 45.0f 而不仅仅是 45.0f

【讨论】:

以上是关于更改 glm::perspective 中的角度反映对象的主要内容,如果未能解决你的问题,请参考以下文章

使用 glm::perspective 时,如何将鼠标的实际像素位置映射到标准化位置?

Model, View(Camera), Perspective

glm::透视解释

在 Opengl 中使用 glm 旋转

一些opengl和glm解释

为对象生成 MVP