我正在尝试使用OpenGL绘制一个简单的四边形。如果我没有使用深度并使用0.0作为z坐标绘制四边形,则相同的代码不会失败。
看起来深度没有启用或者无论如何:
#import <OpenGL/OpenGL.h>
#import <GLUT/GLUT.h>
int width=500, height=500, depth=500;
void init()
{
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, width, height, 0);
gluLookAt(250, 250, 250, 250, 250, -250, 0, 1, 0);
gluPerspective(45, 1, 1.0, 200.0);
}
void display()
{
glClearColor(0.0, 0.0, 0.0, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor4f(1, 0, 0, 0);
glBegin(GL_QUADS);
glVertex3i(100, 100, 100);
glVertex3i(100, 300, 100);
glVertex3i(300, 300, 100);
glVertex3i(300, 100, 100);
glEnd();
glutSwapBuffers();
}
int main(int argc, char * argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition(100, 100);
glutInitWindowSize(width, height);
glutCreateWindow("Test");
glutDisplayFunc(display);
init();
glutMainLoop();
return 0;
}
我只看到一个黑色的窗户,但我应该看到里面有一个红色的四边形。
答案 0 :(得分:1)
将init()
功能更改为:
void init()
{
glEnable(GL_DEPTH_TEST);
glViewport(0, width, height, 0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, 1, 1.0, 200.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(250, 250, 250, 250, 250, -250, 0, 1, 0);
}
您的问题是gluLookAt()
应该用于定义模型视图矩阵,但是您将投影倍增。此外,glViewport()
调用与矩阵计算无关,因此我将其移至函数的初始化。不是真的需要,但我发现更清楚。