gpt4 book ai didi

c++ - 在 OpenGL 中增加到远裁剪平面的距离的简单方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:50:03 27 4
gpt4 key购买 nike

我正在尝试将远裁剪平面设置为更高的值,但我有点迷路。

我正在使用 QMatrix4x4 查看一个复杂的对象像这样的相机视角:

glMatrixMode(GL_MODELVIEW);
m_view = QMatrix4x4();
m_view.lookAt(QVector3D(17.f, 36.f, 36.f), // eye
QVector3D(17.f, 0.f, 19.f), // center
QVector3D( 0.f, 0.f, -1.f)); // up
glLoadMatrixf(m_view.data());

现在,从这个角度看,我的物体被远平面剪裁了。

far plane clip

我尝试使用 frustum 来增加远平面距离具有巨大值(value)的矩阵运算。我只想修改后剪裁平面:

m_view.frustum(1.f, 1.f, 1.f, 1.f, 1.f, 200000.f);

但这并没有显示出任何区别,修改farPlane参数并没有改变任何东西。同样适用于ortho :

m_view.ortho(1.f, 1.f, 1.f, 1.f, 1.f, 200000.f);

perspective :

m_view.perspective(0.f, 1.f, 1.f, 200000.f);

我的方法有什么问题?如何修改远裁剪平面?


编辑

我扩展了上面的代码片段,因为问题不明显。显然我的错误是修改了 GL_MODELVIEW 而不是 GL_PROJECTION

工作代码应该是这样的:

// Projection
m_projection = QMatrix4x4();
m_projection.perspective(20.f, m_width / m_height, 0.01f, 2000.f); // note the far plane
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(m_projection.data());
// Model view
m_view = QMatrix4x4();
m_view.lookAt(QVector3D(17.f, 36.f, 36.f), // eye
QVector3D(17.f, 0.f, 19.f), // center
QVector3D( 0.f, 0.f, -1.f)); // up
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(m_view.data());

最佳答案

2 个问题:

  1. 您在同一个矩阵上混合使用模型 View (lookat) 和投影 (frustum) 操作。您需要 2 个不同的矩阵。

  2. 您在::frustum() 中将左右值都定义为 1.f。它行不通,它们需要有所不同。最高值和最低值相同。

这是 QMatrix4x4::frustum() 定义的摘录:

if (left == right || bottom == top || nearPlane == farPlane)    
return *this;

所以你对 frustum 的调用没有做任何事情。

一旦您为顶部/左侧/顶部/底部设置了合适的值,也可以尝试使用近平面距离,因为它可能会剪切您的对象而不是远平面。

关于c++ - 在 OpenGL 中增加到远裁剪平面的距离的简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17389349/

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