gpt4 book ai didi

c - Quad 上的纹理贴图不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:53 28 4
gpt4 key购买 nike

我正在尝试编写一些代码,将纹理渲染到一个简单的正方形上,但在让它工作时遇到了很多麻烦。我下载了一些用于纹理映射的示例源代码 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();

是否有任何原因导致纹理在圆柱体上正常渲染但在我的四边形上渲染不正常?

最佳答案

示例代码启用了自动纹理坐标生成,因此您的 glTexCoord2f 调用将被忽略。自动生成被投影到 Z 平面上。由于您的四边形是一个 Y 平面,它实际上只是在整个四边形上拉伸(stretch)纹理的一个像素。

要使其正常工作,请在 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);

关于c - Quad 上的纹理贴图不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8639545/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com