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();
}
你知道为什么会这样吗?
发布于 2014-03-25 18:21:32
这实际上是完全正常的行为。
当您使用标识模型视图和投影矩阵时,您的坐标在剪辑空间中。OpenGL中3D顶点的默认W
值为1.0 (顶点始终为4D),剪辑空间-> NDC的工作方式是将顶点的每个组件除以其W
组件,然后裁剪坐标在-1,1范围之外的任何对象。
我认为让您感到困惑的是glDepthRange (...)
调用。这不会影响剪裁。深度范围是视口变换的一部分,视口变换在裁剪之后发生。
https://stackoverflow.com/questions/22642805
复制相似问题