Почему стороны моего куба не отображаются? - PullRequest
0 голосов
/ 19 декабря 2011

Я хотел бы отобразить 5 сторон коробки (только верхняя сторона не показана), простирающихся от - (- - 50, -50, -50) до (50, 50, 50) Моя функция рисования куба выглядит следующим образом:

void drawRectangularPrism(Coordinate corner, Coordinate dimensions)
{
    glPushMatrix();
    glBegin(GL_QUADS);
    // back face
    glNormal3f(0, 0, 1);
    glVertex3f(corner.x, corner.y, corner.z);
    glVertex3f(corner.x + dimensions.x, corner.y, corner.z);
    glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z);
    glVertex3f(corner.x, corner.y + dimensions.y, corner.z);
    // bottom face
    glNormal3f(0, 1, 0);
    glVertex3f(corner.x, corner.y, corner.z);
    glVertex3f(corner.x, corner.y, corner.z + dimensions.z);
    glVertex3f(corner.x + dimensions.x, corner.y, corner.z + dimensions.z);
    glVertex3f(corner.x + dimensions.x, corner.y, corner.z);
    // top face
    glNormal3f(0, -1, 0);
    glVertex3f(corner.x, corner.y + dimensions.y, corner.z);
    glVertex3f(corner.x, corner.y + dimensions.y, corner.z + dimensions.z);
    glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z + dimensions.z);
    glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z);
    // right face
    glNormal3f(-1, 0, 0);
    glVertex3f(corner.x + dimensions.x, corner.y, corner.z);
    glVertex3f(corner.x + dimensions.x, corner.y, corner.z + dimensions.z);
    glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z + dimensions.z);
    glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z);
    // left face
    glNormal3f(1, 0, 0);
    glVertex3f(corner.x, corner.y, corner.z);
    glVertex3f(corner.x, corner.y, corner.z + dimensions.z);
    glVertex3f(corner.x, corner.y + dimensions.y, corner.z + dimensions.z);
    glVertex3f(corner.x, corner.y + dimensions.y, corner.z);
    glEnd();
    glPopMatrix();
}

И в случае, если это полезно, вот моя функция, которая устанавливает рендеринг OpenGL:

void init()
{
    glClearColor(1.0, 1.0, 1.0, 1.0); // Clear the background of our window to white
    GLfloat specular[] = {1.0, 1.0, 1.0, 1.0}, shininess[] = {50.0}, emission[] = {0.0, 0.0, 0.0, 1.0},
        lightPosition[] = {1.0, 1.0, 1.0, 0.0}, lightAmbient[] = {0.0, 0.0, 0.0, 1.0},
        lightDiffuse[] = {1.0, 1.0, 1.0, 1.0}, lightSpecular[] = {1.0, 1.0, 0.0, 1.0};
    glShadeModel(GL_SMOOTH);
    glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
    glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, shininess);
    glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, emission);
    glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
    glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient);
    glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse);
    glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpecular);
    glEnable(GL_LIGHT0);

    //glEnable(GL_DEPTH_TEST); // makes objects overlap correctly / or not?!
    glEnable(GL_LIGHTING);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_CULL_FACE); // makes it faster?!
}

Окончательный результат:

well something's wrong!

Почему верхняя и левая стороны куба не отображаются?

Ответы [ 2 ]

3 голосов
/ 19 декабря 2011

Пары верхняя / нижняя, левая / правая грани изменяются только со смещением, что говорит о том, что вы не учитывали порядок намотки вершин. Посмотрите на glFrontFace для начала.

0 голосов
/ 19 декабря 2011

Ваши квады, скорее всего, отброшены на

glEnable(GL_CULL_FACE);

Удалите его, и оно должно работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...