OpenGL 纹理映射:整个对象是单个纹理元素的颜色

发布于 2024-07-19 07:11:04 字数 1030 浏览 3 评论 0原文

一段时间以来,我一直在尝试为模拟器显示 HUD 纹理,但没有成功。

首先,我像这样绑定纹理:

glGenTextures(1,&hudTexObj);
gHud = getPPM("textures/purplenebula/hud.ppm",&n,&m,&s);
glBindTexture(GL_TEXTURE_2D,hudTexObj);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); 
//glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,n,m,0,GL_RGB,GL_UNSIGNED_INT, gHud);

然后我尝试将其映射到四边形,这会导致整个四边形成为单一棕色,并且我希望它使用所有纹理像素。 这是我的映射方式:

    glBindTexture(GL_TEXTURE_2D,hudTexObj);

glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex2f(0,0);

glTexCoord2f(0.0,1.0);
glVertex2f(0,m);

glTexCoord2f(1.0,1.0);
glVertex2f(n,m);

glTexCoord2f(1.0,0.0);
glVertex2f(n,0);
glEnd();

奇怪的是,我已经能够获得上面的代码来在自己的程序中显示纹理,但是当我将其放入主程序中时,它失败了。 它可能与纹理矩阵有关吗? 这下我就傻眼了。

I've been trying to get a HUD texture to display for a simulator for a while now, without success.

First I bind the texture like this:

glGenTextures(1,&hudTexObj);
gHud = getPPM("textures/purplenebula/hud.ppm",&n,&m,&s);
glBindTexture(GL_TEXTURE_2D,hudTexObj);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); 
//glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,n,m,0,GL_RGB,GL_UNSIGNED_INT, gHud);

And then I attempt to map it to a QUAD, which results in the whole quad being a single brown color, and I want it to use all the texels. Here's how I map:

    glBindTexture(GL_TEXTURE_2D,hudTexObj);

glBegin(GL_QUADS);
glTexCoord2f(0.0,0.0);
glVertex2f(0,0);

glTexCoord2f(0.0,1.0);
glVertex2f(0,m);

glTexCoord2f(1.0,1.0);
glVertex2f(n,m);

glTexCoord2f(1.0,0.0);
glVertex2f(n,0);
glEnd();

The weird thing is that I've been able to get the exact above code to display the texture in a program of its own, yet when I put it into my main program it fails. Could it have to do with the texture matrix? I'm dumbfounded at this point.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓦然回首 2024-07-26 07:11:04

愚蠢的是,我在代码的另一部分启用了自动纹理坐标生成。 因此,如果您看到一个纹理像素的颜色覆盖了整个图像,这就是可能的原因。

Stupidly, I had enabled automatic tex coord generation far away in another part of the code. So if you see one texel's color covering a whole image, that is the likely cause.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文