如何在QT和QGLViewer程序中更改默认QGLViewer的近距离和远距离剪切距离?

时间:2013-12-17 01:59:39

标签: c++ qt opengl qglviewer

我有一个相当大的模型,需要在使用QGLViewer的QT UI程序中显示。 因此,由于默认的近距离和远距离剪切距离太窄,模型得到了切割。 我的问题是如何更改默认的近和远裁剪范围。

例如,我的问题看起来像enter image description here

我尝试使用像

这样的东西
::glMatrixMode(GL_PROJECTION) ;
::glLoadIdentity() ;

::glClearColor(1.0f,1.0f,1.0f,0.0f);
::glFrustum(-0.5,0.5,-0.5,0.5,-100000000.0,100000000.0) ;

::glMatrixMode(GL_MODELVIEW) ;
::glLoadIdentity() ;

这根本不起作用,它也打破了QGLViewer中的鼠标交互。 由于我使用的是QT和QGLViewer,因此我没有可以使用的固定功能。

所以我要求任何人都知道如何让QGLViewer更改其默认剪裁范围。

我发现了QGLViewer提供的一些示例,如clipping plane examplestandard camera example,但我仍然不知道如何更改默认查看器。

1 个答案:

答案 0 :(得分:1)

我想我自己解决了这个问题。来自文档here。 我只是用这段代码初始化了观众,

void Viewer::initializeGL()
{
  QGLViewer::initializeGL();
  this->setSceneRadius(10000.0);
}

但是这也设置了默认的场景摄像机,如果半径很高,默认透视的位置也会改变,所以这个setSceneRadius不仅会改变近/远剪裁平面。

实际上,文档here中有不同的方法。

所以这个可能更好。计算真实近距离和远距离的公式在最后一个链接的文档中。较小的近似系数和较大的剪切系数意味着较大的观察区域范围。

void Viewer::initializeGL()
{
  QGLViewer::initializeGL();
  this->camera()->setZNearCoefficient(0.00001);
  this->camera()->setZClippingCoefficient(1000.0);
}

当然,您可以覆盖自己的近和远定义版本。

class myCamera :: public qglviewer::Camera
{
    virtual float Camera::zNear() const { return 0.001; };
    virtual float Camera::zFar() const { return 100.0; };
}

使用此自定义相机构建您的QGLViewer对象。