我有一个相当大的模型,需要在使用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提供了一些示例,例如clipping plane examplestandard camera example,但是我仍然不知道如何更改默认查看器。

最佳答案

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

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

但这也会设置默认的场景摄像机,如果半径较大,默认透 View 的位置也会更改,因此此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对象。

关于c++ - 如何在QT和QGLViewer程序中更改默认的QGLViewer的近和远剪切距离?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20624582/

10-09 06:35