OpenGL 无缘无故地裁剪一个对象

OpenGL clips an object for no apparent reason

我正在尝试可视化一个由沿 x 轴和 y 轴的 -1 到 1 个顶点组成的简单四边形。为什么opengl会剪辑对象?该代码对我来说似乎是正确的

glm::mat4 m = glm::translate(glm::mat4{1.0f}, toGlmVec3(objectPosition));
glm::mat4 v = glm::lookAtLH(toGlmVec3(cameraPosition), toGlmVec3(objectPosition), glm::vec3(0, 1, 0));
glm::mat4 p = glm::perspective(glm::radians(50.f), float(640.f) / 480.f, 0.0001f, 100.f);
glm::mat4 mvp = /* p* */ v * m; // when I take p back, the object disappears completely

testShader.use();
testShader.setVector4("u_color", math::Vector4f(0.f, 1.f, 0.f, 1.f));
testShader.setMatrix4("u_mMVP", mvp);

在着色器的代码中只有一行

gl_Position = u_mMVP * vec4(a_Pos, 1.0);


沿 z 轴稍微移动相机后

如果我注释掉 v *,那么它工作正常并且对象在屏幕上沿 x 和 y 轴移动

没有视图矩阵,只有模型:

沿 x 和 y 移动对象

看起来渲染代码工作正常,但视图和投影矩阵有什么问题?

对象被 Orthographic projection. If you don't explicitly set an projection matrix, the projection matrix is the Identity matrix 的近平面和远平面裁剪。近平面远窗格位于 +/- 1。

使用glm::ortho定义不同的投影矩阵。例如:

glm::mat4 p = glm::ortho(-1, 1, -1, 1, -10, 10);

正交投影矩阵定义了观察者位置周围的长方体观察体积。此体积之外的所有几何体都被剪裁。