簡體   English   中英

Qt中的OpenGL深度測試無法正常工作

[英]OpenGL Depth Testing in Qt not working

我用以下格式設置格式:

QGLFormat format = QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer);
setFormat(format);

構造函數中

然后在initializeGL中我設置了depthTesting。

void VoxelEditor::initializeGL()
{
    glClearDepth(2000.0);                                   // Enables Clearing Of The Depth Buffer
    glEnable(GL_DEPTH_TEST);                            // Enables Depth Testing
    glDepthFunc(GL_LESS);                               // The Type Of Depth Test To Do
    glShadeModel(GL_SMOOTH);                            // Enables Smooth Color Shading
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);  // Really Nice Perspective Calculations
}

在paintGL中我清除了深度緩沖區。

void VoxelEditor::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    draw();
}

我記得它曾經使用較少的頂點,所以可能是我使用了太多的深度緩沖區來處理(?)。 我有32 * 32 * 32體素,大部分時間都是一半,所以98304四邊形。

然而,深度測試仍然不起作用,並按執行順序顯示四邊形。

所以我可能會使用太多的深度緩沖來處理(?)。

深度緩沖區不考慮頂點。 所有它看到的都是傳入的碎片,無論多少都無關緊要。

 void VoxelEditor::initializeGL() { glClearDepth(2000.0); // Enables Clearing Of The Depth Buffer 

此行無法清除。 它設置深度緩沖區被清除的值。 該值必須在0 ... 1范圍內。 清除深度在標准化設備坐標中,即在模型視圖之后,已應用投影和均勻分割。 默認值為1。

  glEnable(GL_DEPTH_TEST); // Enables Depth Testing glDepthFunc(GL_LESS); // The Type Of Depth Test To Do glShadeModel(GL_SMOOTH) // Enables Smooth Color Shading glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations 

不,那不是什么意思。 透視只是一個線性變換,總是起作用。 這意味着,紋理坐標可以以不同的方式插值以提高質量。

 } 

我總是建議將這些調用放在繪圖函數中,因為它們不會初始化任何東西。 他們設定了繪畫狀態。 OpenGL是一個狀態機和狀態機的一個重要原則是,要么你把自己的狀態的曲目你必須把它們放到每當你要使用它已知狀態。

我通過在draw()中設置setDepthTest來修復此問題。

glMatrixMode(GL_MODELVIEW);
glEnable(GL_DEPTH_TEST);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM