c++ - OpenGL 无缘无故地裁剪一个对象

标签 c++ opengl glm-math perspectivecamera

我正在尝试可视化一个由沿 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);

enter image description here
沿 z 轴稍微移动相机后
enter image description here

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

没有 View 矩阵,只有模型:
enter image description here
沿 x 和 y 移动对象
enter image description here

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

最佳答案

对象被 Orthographic projection 的近平面和远平面裁剪。如果您没有显式设置投影矩阵,则投影矩阵为 Identity matrix 。近平面远 Pane 位于 +/- 1。

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

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

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

关于c++ - OpenGL 无缘无故地裁剪一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69140599/

相关文章:

c++ - 全局环境照明?

c++ - OpenGL glm围绕点旋转模型问题

c++ - GLM + STL : operator == missing

c++ - 闰年程序似乎没有运行

c++ - 在找到总计并将其插入C++文件中的同时获取垃圾值

c++ - 'tesseract/baseapi.h' 错误

math - 在直线上找一个点

c++ - 在有向图中广度优先搜索

opengl - 如何使用 OpenGL/glut 暂停动画

c++ - 使用扫掠 AABB 交叉算法解决碰撞法线