c - OpenGL 纹理映射 : Whole object is a single texel's color

标签 c opengl texture-mapping

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

首先我像这样绑定(bind)纹理:

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

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

最佳答案

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

关于c - OpenGL 纹理映射 : Whole object is a single texel's color,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835729/

相关文章:

c - 与 coccinelle 匹配 *ptr = value

c++ - 错误 C2039 : 'exit' and Error C2873: 'exit' (Suddenly Wont Compile)

c++ - Direct3D 中具有雾问题的 HLSL 多纹理

opengl - 如何使用 GL_REPEAT 仅重复选择纹理图集? (OpenGL)

c - 是否可以将两个以上的标准流连接到 Linux 中的终端?

c - 在 STM32F405 上移动 vector 表

c - 为什么 fscanf 不扫描行尾的整数?

opengl - SPIR-V 字节码是否提供混淆?

macos - 为 OpenCV 3.1.0 安装 ArUco 时出现问题

c++ - OpenGL 纹理解除绑定(bind)