为什么我的纹理渲染不正确在我的OpenGL应用程序

Why is my texture rendered improperly in my OpenGL application?

本文关键字:我的 OpenGL 应用程序 不正确 纹理 为什么      更新时间:2023-10-16

我正在使用SDL和OpenGL,创建一个相当简单的应用程序。我创建了一个基本的文本渲染函数,它将生成的纹理映射到每个字符的四边形上。这个纹理是由每个字符的位图渲染的。

位图相当小,大约为800x16像素。在我的台式机和笔记本电脑上,无论是在虚拟机内还是在虚拟机外(以及在Windows和Linux上),都工作得非常好。

现在,我在另一台电脑上尝试,文本变得乱码-似乎计算机不能处理像这样的非常基本的事情。为了看看是不是操作系统的问题,我安装了VirtualBox并在虚拟机中进行了测试——但结果更糟!它只是呈现一个普通的白框,而不是呈现任何东西(尽管是乱码)。

为什么会发生这种情况,有没有办法解决它?


一些代码-如何初始化纹理:

glGenTextures(1, &fontRef);
glBindTexture(GL_TEXTURE_2D, iFont);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, FNT_IMG_W, FNT_IMG_H, 0,
             GL_RGB, GL_UNSIGNED_BYTE, MY_FONT);

上面,MY_FONT是一个无符号字符数组(从GIMP转储的原始图像)。当我画一个字符:

GLfloat ix = c * (GLfloat) FNT_CHAR_W;
// We just map each corner of the texture to a new vertex.
glTexCoord2d(ix,              FNT_CHAR_H); glVertex3d(x,          y,          0);
glTexCoord2d(ix + FNT_CHAR_W, FNT_CHAR_H); glVertex3d(x + iCharW, y,          0);
glTexCoord2d(ix + FNT_CHAR_W, 0);          glVertex3d(x + iCharW, y + iCharH, 0);
glTexCoord2d(ix,              0);          glVertex3d(x,          y + iCharH, 0);

这听起来好像你正在工作的机器的显卡只支持两种纹理(即16,32,64…)。800x16肯定不能在这样的GFX卡上工作。

您可以使用glGetARB_texture_non_power_of_two来检查gfx卡是否支持它。