QGL,opengl - zaxis的所有值都在1之外; -1被剪裁

时间:2014-03-25 18:05:36

标签: qt opengl

z轴以外的所有数字:(1; -1)范围被剪裁。这是一些代码:

void MainWindow::initializeGL()
{
    glDepthRange(-2,2);
    glEnable(GL_TEXTURE_2D);
    glDisable(GL_COLOR_MATERIAL);
    glEnable(GL_BLEND);
    glEnable(GL_POLYGON_SMOOTH);
    //glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glClearColor(1, 1, 0, 0);
    glDisable(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);

}

void MainWindow::paintGL(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();
 // glEnable(GL_TEXTURE_2D);
 // glBindTexture(GL_TEXTURE_2D,texture);
 // glTexSubImage2D(GL_TEXTURE_2D, 0, 0,0 , image.width(), image.height(),  0, 0, image.bits() );
//glMatrixMode(GL_MODELVIEW);
//glEnable(GL_DEPTH_TEST);
glTranslated(0.0, 0.0, 1.9);
  qglColor(Qt::black);
      glBegin(GL_TRIANGLES);

      glVertex3d(-0.1,0.1,1);
      glVertex3d(-0.1,-0.1,-1);
      glVertex3d(0.1,-0.1,0);

      glEnd();

}

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

这实际上是完全正常的行为。

使用标识模型视图和投影矩阵时,您的坐标位于剪辑空间中。 OpenGL中3D顶点的默认W值为 1.0 (顶点始终为4D),剪辑空间 - > NDC的工作原理是将顶点的每个分量除以其W分量,然后用范围[-1,1]之外的坐标剪切任何东西。

我认为令人困惑的是glDepthRange (...)电话。这不会影响裁剪。深度范围是视口转换的一部分,在 剪裁后发生