C语言 纹理映射在四边形不工作



我试图写一些代码,将纹理渲染到一个简单的正方形,但一直有很多麻烦让它的工作。我在这里下载了一些纹理映射的示例源代码并编译了它,它似乎可以很好地将纹理映射到它们的圆柱体上。然后,我添加了一些代码,看看它是否会将纹理渲染到我的正方形上,但它只是用一种介于红色和黑色之间的纯色纹理,而不是像它出现在圆柱体上的棋盘格。下面是我添加的代码,就在第一次调用气缸之后:

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();

有什么原因为什么纹理会在圆柱体上正常渲染,而不是在我的四边形上?

示例代码启用自动纹理坐标生成,因此您的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);

最新更新