C 无法使用三维图形绘制简单的四边形

C 无法使用三维图形绘制简单的四边形,c,opengl,glut,C,Opengl,Glut,我正在尝试用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);

我正在尝试用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;
}
#导入
#进口
内部宽度=500,高度=500,深度=500;
void init()
{
glEnable(GLU深度试验);
glMatrixMode(GL_投影);
glLoadIdentity();
glViewport(0,宽度,高度,0);
gluLookAt(250250250250250250,-250,0,1,0);
gluPerspective(45,1,1.0,200.0);
}
无效显示()
{
glClearColor(0.0,0.0,0.0,0);
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
gl4f(1,0,0,0);
glBegin(GL_QUADS);
glVertex3i(100100100);
glVertex3i(100300100);
glVertex3i(300300100);
glVertex3i(300100100);
格伦德();
glutSwapBuffers();
}
int main(int argc,char*argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_双精度| GLUT_RGB | GLUT_深度);
位置(100100);
glutInitWindowSize(宽度、高度);
测试窗口(“测试”);
glutDisplayFunc(显示器);
init();
glutMainLoop();
返回0;
}
我只看到一个黑色窗口,但我应该看到它里面有一个红色的四边形。

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()
调用与矩阵计算无关,因此我将其移动到函数的begining。实际上不需要,但我觉得更清楚。

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()
调用与矩阵计算无关,因此我将其移动到函数的begining。不需要,但我觉得更清楚。

非常感谢,直到现在我还不知道如何使用3D图形。非常感谢,直到现在我还不知道如何使用3D图形。