1

我有一个相当大的模型,需要在使用 QGLViewer 的 QT UI 程序中显示。所以模型被剪切是因为默认的近远裁剪距离太窄。我的问题是如何更改默认的远近剪辑范围。

例如,我的问题可能看起来像这样在此处输入图像描述

我尝试使用类似的东西,

::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,因此没有可以使用的 glu 函数。

所以我问任何人都知道如何让 QGLViewer 改变它的默认剪辑范围。

我找到了一些 QGLViewer 提供的示例,例如裁剪平面示例标准相机示例,但我仍然不知道如何更改默认查看器。

4

1 回答 1

1

我想我自己解决了这个问题。从这里的文档。我只是用这段代码来初始化查看器,

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

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

实际上,这里的文档有不同的方法。

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

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 对象。

于 2013-12-17T03:53:28.583 回答