2011-12-26 101 views
0

我想寫一些代碼,將渲染紋理到一個簡單的正方形,但一直有很多麻煩得到它的工作。我下載了一些示例源代碼,用於紋理映射here並對其進行了編譯,並且似乎將紋理映射罰款到他們的圓柱體上。然後,我添加了一些我的代碼,看看它是否會將紋理渲染到我的方形上,但它只是用一種純色來構造它,這種顏色似乎是紅色和黑色之間的中間位置,而不是棋盤上出現的棋盤。下面是我添加的代碼,調用gluCylinder第一遍之後:在四不工作的紋理映射

glBegin(GL_QUADS); 
glTexCoord2f(0, 0); 
glVertex2f(-1, -1); 
glTexCoord2f(1,0); 
glVertex2f(1, -1); 
glTexCoord2f(1, 1); 
glVertex2f(1, 1); 
glTexCoord2f(0,1); 
glVertex2f(-1, 1); 
glEnd(); 

有什麼理由紋理通常會呈現在氣缸卻沒有關於我的四?

回答

5

示例代碼啓用自動紋理座標生成,因此您的glTexCoord2f調用將被忽略。自動生成被投影到Z平面上。由於您的四邊形是Y平面,因此它基本上只是在整個四邊形中延伸一個像素的紋理。

爲了使其工作,請在glBegin之前禁用自動紋理生成,然後在glEnd之後重新啓用它。

即:

glDisable(GL_TEXTURE_GEN_S); 
glDisable(GL_TEXTURE_GEN_T); 

glBegin(GL_QUADS); 
    glTexCoord2f(0, 0); 
    glVertex2f(-1, -1); 
    glTexCoord2f(1,0); 
    glVertex2f(1, -1); 
    glTexCoord2f(1, 1); 
    glVertex2f(1, 1); 
    glTexCoord2f(0,1); 
    glVertex2f(-1, 1); 
glEnd(); 

glEnable (GL_TEXTURE_GEN_S); 
glEnable (GL_TEXTURE_GEN_T); 

或者,你可以設置自動紋理生成項目在Y平面,並且省略了glTexCoord2f調用,然後將其設置回至Z時,即可大功告成:

float zPlane[4] = {0., 0., 1., 0.}; 
float yPlane[4] = {0., 1., 0., 0.}; 
glTexGenfv (GL_T, GL_OBJECT_PLANE, yPlane); 

glBegin(GL_QUADS); 
    glVertex2f(-1, -1); 
    glVertex2f(1, -1); 
    glVertex2f(1, 1); 
    glVertex2f(-1, 1); 
glEnd(); 

glTexGenfv (GL_T, GL_OBJECT_PLANE, zPlane); 
+0

就是這樣!謝謝,你剛剛教了我一大堆關於OpenGL紋理映射! – eyebrowsoffire 2011-12-27 09:16:49