我有一个相当大的模型,需要在使用 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);
}
但这也设置了默认的场景相机,如果半径很高,默认透视的位置也会改变,所以这个 setSceneRadius 不仅改变了近/远的裁剪平面。
其实和文档有不同的方法here .
所以这个可能更好。计算实际近距离和远距离的公式在最后一个链接的文档中。 near coef越小,Clipping 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 对象。
关于c++ - QT和QGLViewer程序中如何改变QGLViewer默认的远近裁剪距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20624582/