gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:30:50 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com