我正在尝试将远裁剪平面设置为更高的值,但我有点迷茫。
我正在使用像这样的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());
现在,从这个角度来看,我的对象正在被远平面剪裁。
我试图通过使用具有巨大价值的截锥矩阵运算来增加远平面距离。我想要的只是修改后剪裁平面:
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);
或观点:
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());