OpenGL C++中如何设置透视图显示真实的位置

vc6uscn9  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(144)

我尝试用glad库,sfml代替glfw和glm库在opengl中制作Minecraft,我已经渲染了十个立方体,它们彼此相邻(没有任何间隙),并且它们的一面互相接触,但是透视效果产生了一种奇怪的效果。
当摄像机关闭时:

当摄像机在远处时:

当摄像机位于X轴的右侧时:

我想立方体显示在一条线根据他们原来的位置;
我的视角代码:

glm::mat4 perspective = glm::mat4(1.0f);
perspective = glm::perspective(glm::radians(45.f), (float)( window.getSize().x /  window.getSize().y), 0.1f, 100.0f);

在主回路中:

GLuint UNI_perspective = glGetUniformLocation(program.program, "perspective");
glUniformMatrix4fv(UNI_perspective, 1, GL_FALSE, glm::value_ptr(perspective));

顶点着色器:

#version 430 core
layout(location = 0) in vec3 aPos;
layout(location = 1) in vec2 texCoords;
out vec2 outCoords;
uniform mat4 view;
uniform mat4 perspective;
uniform mat4 transforms;
void main()
{
    gl_Position = transforms * perspective * view * vec4(aPos, 1.0);
    outCoords = texCoords;
}

所有制服都有一个特定的矩阵值,意味着它们不为NULL
我已经看了许多网站,并尝试使用glm::ortho功能也,但没有工作。

vdgimpew

vdgimpew1#

gl_Position =变换 * 透视 * 视图 * vec 4(aPos,1.0);应为gl_Position =透视图 * 视图 * 变换 * vec 4(aPos,1.0);矩阵乘法不是可交换的。

相关问题