gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:33:11 26 4
gpt4 key购买 nike

我正在使用 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_texture_non_power_of_two 来检查 gfx 卡是否支持它。

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

关于c++ - 为什么我的纹理在我的 OpenGL 应用程序中渲染不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7043515/

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