2013-12-17 20 views
1

我得到了一個相當大的模型,需要在使用QGLViewer的QT UI程序中顯示。 因此,模型因爲默認的近距離和遠距離裁剪距離太窄而被切斷。 我的問題是如何更改默認的近距和遠距剪輯範圍。如何在QT和QGLViewer程序中更改默認的QGLViewer的近和遠裁剪距離?

例如我的問題看起來是這樣的一個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,但我仍然沒有線索如何更改默認查看器。

+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對象與這個定製的相機。

相關問題