为什么我的纹理渲染不正确在我的OpenGL应用程序
Why is my texture rendered improperly in my OpenGL application?
我正在使用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卡上工作。
您可以使用glGet与ARB_texture_non_power_of_two来检查gfx卡是否支持它。
相关文章:
- 如何使实例化在我的 OpenGL 程序中工作?
- 如何调试我的 OpenGl 问题
- 如何让我的OpenGL视频具有与QQuickItem相同的大小和位置?
- 我的 OpenGL QQuickItem 没有我想要的大小
- 我的OpenGL顶点阵列将其抽象成课程不再起作用
- 为什么我的 OpenGL 纹理不起作用?
- 为什么我的 openGL 顶点缓冲区对象不会绘制任何内容?
- 我的OpenGL/Glut.h代码上的参数方程式错误
- 我的OpenGL和SDL2代码有什么问题
- 为什么我的纹理在我的 openGL 渲染器中显示为分形图案
- 为什么我的OpenGL引擎中没有从MyGUI获得任何屏幕输出
- 为什么我的 OpenGL 对象相对于最后一个绘制的对象绘制
- 我的OpenGL应用程序在ATI上运行,但在nNVIDIA的PC上不起作用
- 为什么我的 OpenGL 代码不起作用
- 为什么我的OpenGL 3.3应用程序没有绘制任何内容
- 试图将GLUT包含在我的openGL项目中
- 我的朋友无法在他的 linux 发行版上运行我的 openGL 程序
- 我无法让我的 OpenGL 程序渲染三角形
- 增加我的openGL太阳系的FPS
- 我的OpenGL平面有问题