2011-12-26 100 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