2013-11-02 7 views
3

Я пытаюсь нарисовать квадрат комнату в OPENGL, и у меня есть это:C++ OpenGL рисовать комнату

void drawWalls() 
{ 

glColor3f(1,0,0); 
glPushMatrix(); 
//glRotatef(0,0,0,1); 
//glScalef(2,1,2); 
glBegin(GL_QUADS); 
/* Floor */ 
glVertex3f(-1,-1,-1); 
glVertex3f(1,-1,-1); 
glVertex3f(1,-1,1); 
glVertex3f(-1,-1,1); 
/* Ceiling */ 
glVertex3f(-1,1,-1); 
glVertex3f(1,1,-1); 
glVertex3f(1,1,1); 
glVertex3f(-1,1,1); 
    /* Walls */ 
glVertex3f(-1,-1,1); 
glVertex3f(1,-1,1); 
glVertex3f(1,1,1); 
glVertex3f(-1,1,1); 

glVertex3f(-1,-1,-1); 
glVertex3f(1,-1,-1); 
glVertex3f(1,1,-1); 
glVertex3f(-1,1,-1); 

glVertex3f(1,1,1); 
glVertex3f(1,-1,1); 
glVertex3f(1,-1,-1); 
glVertex3f(1,1,-1); 

glVertex3f(-1,1,1); 
glVertex3f(-1,-1,1); 
glVertex3f(-1,-1,-1); 
glVertex3f(-1,1,-1); 
glEnd(); 

glPopMatrix(); 

} 

По каким-то причинам это не рисование всех моих сторон! Я просмотрел мой вектор, и это, кажется, правильно ... Но когда вы смотрите внутрь, вы увидите следующее:

walls

Что я делаю неправильно? Или, если возможно, есть ли лучший способ сделать комнату вместо этого? Спасибо

+0

положить свои фигуры в комментарии (/ * glvertex3d ... * /). Нарисуйте 2 фигуры, если это нормально, нарисуйте 3, если ok продолжит разложение. Когда вы найдете плохую цифру glvertex3d в ​​четыре раза, прокомментируйте остальные и посмотрите, что она делает. Если это не так, вам нужно установить znear вашей камеры ниже, но, похоже, это не так. –

+0

Другие возможности включают проблемы с порядком намотки, отбраковкой или буферами глубины. – user1118321

ответ

4

Ваш пол определяется по часовой стрелке, а ваш потолок определен против часовой стрелки (относительно нормалей, которые я подразумевал из вашего описания). Когда отбраковка разрешена, каждый квадрат, который обращен в сторону от камеры, не нарисован.

Для того, чтобы исправить это, пол должен быть определен следующим образом:

(-1, -1, -1) 
(-1, -1, 1) 
(1, -1, 1) 
(1, -1, -1) 

Сделайте то же самое с другими стенами, которые не появляются. Просто определите их против часовой стрелки.

+0

ahh, хорошо, позвольте мне попробовать, спасибо! –

Смежные вопросы