c++ - QT和QGLViewer程序中如何改变QGLViewer默认的远近裁剪距离?

标签 c++ qt opengl qglviewer

我有一个相当大的模型,需要在使用 QGLViewer 的 QT UI 程序中显示。 所以由于默认的近距离和远距离裁剪距离太窄,模型被切割了。 我的问题是如何更改默认的近距和远距裁剪范围。

例如我的问题可能看起来像这个 enter image description here

我试着用类似的东西,

::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/

相关文章:

c++ - 与 C++ 相关的文件

实现 Go goroutine 或 Go channel 的 C++ 库?

没有累积缓冲区的 OpenGL 抗锯齿

c# - tao SimpleOpenGlControl 出错

c++ - NURBS 和 opengl 4.2 内核怎么样?

c++ - (void) 在 C++ 中是什么意思?

c++ - 在 mac osx 上使用 gnu/c getline() 编译 c++ 代码?

qt - 如何在 QCombobox 中为分隔符添加样式表

qt - QQuickItem::mapToItem 返回类型是什么?

python - pyqt QTreeWidget setItemWidget 拖/放后消失