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

C++ 为什么我的纹理在OpenGL应用程序中渲染不正确?,c++,opengl,sdl,textures,texture-mapping,C++,Opengl,Sdl,Textures,Texture Mapping,我正在使用SDL和OpenGL,创建一个相当简单的应用程序。我创建了一个基本的文本渲染函数,它将生成的纹理映射到每个角色的四元体上。此纹理是从每个角色的位图渲染的 位图相当小,约为800x16像素。在我的台式机和笔记本电脑上,无论是在虚拟机内还是在虚拟机外(以及在Windows和Linux上),它都能正常工作 现在,我在另一台计算机上试用,文本变得乱七八糟——似乎计算机无法处理这样一个非常基本的事情。为了看看这是否是由于操作系统造成的,我安装了VirtualBox并在VM中进行了测试——但结果更

我正在使用SDL和OpenGL,创建一个相当简单的应用程序。我创建了一个基本的文本渲染函数,它将生成的纹理映射到每个角色的四元体上。此纹理是从每个角色的位图渲染的

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

现在,我在另一台计算机上试用,文本变得乱七八糟——似乎计算机无法处理这样一个非常基本的事情。为了看看这是否是由于操作系统造成的,我安装了VirtualBox并在VM中进行了测试——但结果更糟!它只渲染一个普通的白色框,而不是渲染任何东西(尽管有点混乱)

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


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

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\U纹理\U非\U power\U of 2来检查gfx卡是否支持它


或者使用GLEW为您进行检查。

如果您调整纹理大小,使宽度为2的幂(即512 x 16),它是否正确显示?哦,哇,我不知道这个。。。是否可以使用组合(即16 x 64),或者纹理是否需要为方形?我现在正在检查这个值。好的,虚拟机不支持它,我不能检查它运行的机器(这就是我使用虚拟机的原因),但是,你知道为什么纹理会在机器上显示(尽管是乱码),而不是在虚拟机中显示吗?嗯,没关系-我只是强迫它认为纹理是512 x 16,现在它显示得很好很清晰。我想我会用一些额外的像素来填充纹理,使其大小合适,谢谢!