我正在尝试将远裁剪平面设置为更高的值,但我有些迷失。
我正在使用类似于 QMatrix4x4 的相机透视查看一个复杂对象:
但这并没有显示出任何差异,修改
我的方法有什么问题?如何修改远裁剪面?
我正在使用类似于 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
参数不会改变任何东西。 正交投影也是如此: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());
m_view.lookAt()
的工作效果很好,但是m_view.frustum()
对近平面和远平面没有任何影响。修改视锥体的左、右、上、下参数确实在某种程度上起作用。只有近平面和远平面没有变化。 - q9f