2013-11-02 199 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個,如果可以繼續分解。當你發現不好的glvertex3d四重奏時,請評論其他人並看看它確實做了什麼。如果不是這樣,則必須將相機的焦距設置得更低,但似乎並非如此。 –

+0

其他可能性包括纏繞順序,剔除或深度緩衝區問題。 – user1118321

回答

4

你的地板是順時針定義的,而你的天花板是逆時針定義的(關於我從你的描述中暗示的法線)。當啓用剔除功能時,每個背對相機的四邊形均未繪製。

爲了解決這個問題,地板必須被這樣定義:

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

做同樣與其它牆面不露面。只需要逆時針定義它們。

+0

啊,好吧,讓我試試看,謝謝! –