opengl:无法绘制左墙

opengl: unable to draw left wall

我正在尝试开始使用 opengl 构建一个非常基本的房间。出于某种原因,在函数 drawWalls() 中,左墙没有被绘制,或者我误解了相机的定位。有谁知道为什么我在 运行 这段代码时看不到左墙?

我的代码:

#include <gl/gl.h>
#include <gl/glut.h>

/*defining colors used in the room*/
GLfloat black[] = {0.0, 0.0, 0.0, 1.0};
GLfloat white[] = {1.0, 1.0, 1.0, 1.0};
GLfloat brown[] = {165.0/255.0, 42.0/255.0, 42.0/255.0, 1.0};

void drawFloor()
{
    glBegin(GL_QUAD_STRIP);
    glColor4fv(black);
    glVertex3f(0.0, 0.0, -3.0);
    glVertex3f(1.0, 0.0, -3.0);
    glVertex3f(2.0, 0.0, -3.0);
    glEnd();
}

void drawWalls()
{
    glBegin(GL_QUAD_STRIP);
    glColor4fv(white);

    glPolygonMode(GL_FRONT, GL_FILL);


//draw left wall
glVertex3f(0.0, 0.0, 2.0);
glVertex3f(0.0, 1.0, 2.0);
glVertex3f(0.0, 0.0, 1.0);
glVertex3f(0.0, 1.0, 1.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 1.0, 0.0);

//draw front wall
            glVertex3f(0.0, 0.0, 3.0);
            glVertex3f(0.0, 1.0, 3.0);
            glVertex3f(1.0, 0.0, 3.0);
            glVertex3f(1.0, 1.0, 3.0);
            glVertex3f(2.0, 0.0, 3.0);
            glVertex3f(2.0, 1.0, 3.0);
    glEnd();
}
void display()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, 0.0, 0.8, 0.0, 1.0, 0.0,  1.0, 0.0);
drawFloor();
    drawWalls();
    glFlush();
    glutSwapBuffers();
}

void reshape(int w, int h)
{
    glViewport(0, 0, (GLsizei) w, (GLsizei) h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
gluPerspective(60, (GLfloat) w / (GLfloat) h, 1, 500);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void idleFunc()
{
    glutPostRedisplay();
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(0, 0);
    glutCreateWindow("My room");
    glEnable(GL_DEPTH_TEST);
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutIdleFunc(idleFunc);
    glutMainLoop();
}

为什么你希望看到左边的墙?它在屏幕外(对于您 window 的任何合理纵横比)。如果我们想象一些 "world space",你会遇到以下情况:你的相机被放置在原点并且几乎看向对角线向量。 lfet 墙也放置在 x=0 处,因此视图方向和墙之间几乎有 45 度角。您的平截头体从相机前面的距离 1 开始,垂直 FOV 为 60 度,水平 FOV 由 window 的纵横比定义。因此,如果您将 window 设置得比高度宽得多,您就有机会看到那堵墙。