我有一个相当大的模型,需要在使用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,因此我没有可以使用的固定功能。
所以我要求任何人都知道如何让QGLViewer更改其默认剪裁范围。
我发现了QGLViewer提供的一些示例,如clipping plane example,standard camera example,但我仍然不知道如何更改默认查看器。
答案 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对象。