我有一个相当大的模型,需要在使用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 example,standard 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/