首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在QT和QGLViewer程序中更改QGLViewer的近和远裁剪距离?

如何在QT和QGLViewer程序中更改QGLViewer的近和远裁剪距离?
EN

Stack Overflow用户
提问于 2013-12-17 01:59:38
回答 1查看 980关注 0票数 1

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

例如,我的问题可能看起来像这个

我试着用这样的方法,

代码语言:javascript
复制
::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提供的示例,如裁剪平面实例标准摄像机示例,但我仍然不知道如何更改默认查看器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-17 03:53:28

我想我自己解决了这个问题。来自文档这里。我只是用这个代码初始化了查看器,

代码语言:javascript
复制
void Viewer::initializeGL()
{
  QGLViewer::initializeGL();
  this->setSceneRadius(10000.0);
}

但是这也设置了默认的场景摄像机,如果半径很大,则默认透视的位置也会发生变化,因此这个setSceneRadius不仅改变了近/远裁剪平面。

实际上,文档这里有不同的方法。

所以这个也许更好。计算实际近和远的公式在最后一个链接的文档中。较小的近coef和较大的裁剪coef意味着更大的观察范围。

代码语言:javascript
复制
void Viewer::initializeGL()
{
  QGLViewer::initializeGL();
  this->camera()->setZNearCoefficient(0.00001);
  this->camera()->setZClippingCoefficient(1000.0);
}

当然,您可以重写您自己版本的“近距和远距离”定义。

代码语言:javascript
复制
class myCamera :: public qglviewer::Camera
{
    virtual float Camera::zNear() const { return 0.001; };
    virtual float Camera::zFar() const { return 100.0; };
}

用这个定制的相机来构造你的QGLViewer对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20624582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档