我試圖創建一個簡單的細胞着色效果,它涉及到背部和前臉撲殺。但到目前爲止,我的撲殺結果很奇怪。OpenGL的背面剔除曹景偉奇怪的結果
安裝OpenGL的源代碼:
// init matrices
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, 800/600, 0.01f, 150);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// enable opengl caps
glEnable(GL_NORMALIZE);
glEnable(GL_CULL_FACE);
// cell shading effects
glLineWidth(3.5f);
// setup display list
pDList = glGenLists(1);
glNewList(pDList, GL_COMPILE);
glBegin(GL_QUADS);
// front
glNormal3f(0, 0, 1);
glVertex3f(-0.25f, -0.5f, -3);
glVertex3f(0.25f, -0.5f, -3);
glVertex3f(0.25f, -1, -3);
glVertex3f(-0.25f, -1, -3);
// back
glNormal3f(0, 0, -1);
glVertex3f(-0.25f, -0.5f, -3.5f);
glVertex3f(0.25f, -0.5f, -3.5f);
glVertex3f(0.25f, -1, -3.5f);
glVertex3f(-0.25f, -1, -3.5f);
// top
glNormal3f(0, 1, 0);
glVertex3f(-0.25f, -0.5f, -3.5f);
glVertex3f(0.25f, -0.5f, -3.5f);
glVertex3f(0.25f, -0.5f, -3);
glVertex3f(-0.25f, -0.5f, -3);
// bottom
glNormal3f(0, -1, 0);
glVertex3f(-0.25f, -1, -3.5f);
glVertex3f(0.25f, -1, -3.5f);
glVertex3f(0.25f, -1, -3);
glVertex3f(-0.25f, -1, -3);
// right
glNormal3f(1, 0, 0);
glVertex3f(0.25f, -0.5f, -3);
glVertex3f(0.25f, -0.5f, -3.5f);
glVertex3f(0.25f, -1, -3.5f);
glVertex3f(0.25f, -1, -3);
// left
glNormal3f(-1, 0, 0);
glVertex3f(-0.25f, -0.5f, -3);
glVertex3f(-0.25f, -0.5f, -3.5f);
glVertex3f(-0.25f, -1, -3.5f);
glVertex3f(-0.25f, -1, -3);
glEnd();
glEndList();
渲染代碼:
// clear
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.75f, 0.75f, 0.75f, 1);
// reset matrix
glLoadIdentity();
// draw cube
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glCullFace(GL_BACK);
glColor3i(0, 0, 0);
glCallList(pDList);
這是我得到:
出於某種原因,它只能繪製權立方體的一面。奇怪的。 我改變了glCullFace(GL_BACK); glCullFace(GL_FRONT);在我的渲染功能。 我得到這個:
現在,它的繪製每邊?它似乎認爲立方體的右側面向後,前方,立方體的其餘部分朝後。當我禁用剔除功能時,我也會在上圖中看到相同的結果。
其他相關信息,我能想到的是,我使用SDL,而且我敢肯定,這不是顯卡的問題,因爲我已經跑了這兩個不同的計算機,每個產生相同結果。
我剛開始學習如何設置一個原語的法線,所以很可能這是一個很大的n00b錯誤,或者一些愚蠢的錯誤。我想成爲一個百萬富翁,如果我每一次我做過的最輕率的明顯錯誤的時間得到一分錢,並已粘貼了幾個小時。
因此,概括地說,我做了什麼錯誤,以及如何獲得正確的臉邊宰殺或以適當的方式不剔除?
我的OpenGL的初始化代碼是有點生疏,但你不應該某處定義你的頂點(GL_CW,GL_CCW)的順序? – MFH
不太清楚你的意思是什麼,我仍然在學習OpenGL ... – Aaron
顯然謝爾蓋K有相同的想法,但能夠以更好的方式呈現:) – MFH