我有一个相当大的模型,需要在使用QGLViewer的QT程序中显示。因此,由于预设的裁剪距离太窄,使得模型被裁剪。我的问题是如何更改默认的近和远剪辑范围。
例如,我的问题可能看起来像这个

我试着用这样的方法,
::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提供的示例,如裁剪平面实例、标准摄像机示例,但我仍然不知道如何更改默认查看器。
发布于 2013-12-17 03:53:28
我想我自己解决了这个问题。来自文档这里。我只是用这个代码初始化了查看器,
void Viewer::initializeGL()
{
QGLViewer::initializeGL();
this->setSceneRadius(10000.0);
}但是这也设置了默认的场景摄像机,如果半径很大,则默认透视的位置也会发生变化,因此这个setSceneRadius不仅改变了近/远裁剪平面。
实际上,文档这里有不同的方法。
所以这个也许更好。计算实际近和远的公式在最后一个链接的文档中。较小的近coef和较大的裁剪coef意味着更大的观察范围。
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对象。
https://stackoverflow.com/questions/20624582
复制相似问题