OpenGL纹理未显示
OpenGL texture is not showing
我正在尝试在OpenGL中显示一个简单的纹理(来自数组(,但我只是得到一个空白的白色屏幕。
我的代码生成纹理:
GLbyte textureData[] = { 0, 0, 0, 255, 0, 0, 0, 255, 0, 0, 0, 255 };
GLsizei width = 2;
GLsizei height = 2;
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glGenTextures(1, &textureName);
glBindTexture(GL_TEXTURE_2D, textureName);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, width, height, 0, GL_UNSIGNED_BYTE, GL_RGB8, (GLvoid*)textureData);
和显示代码:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textureName);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0.0, 0.0);
glVertex2f(-1.0, -1.0);
glTexCoord2f(1.0, 0.0);
glVertex2f(1.0, -1.0);
glTexCoord2f(0.0, 1.0);
glVertex2f(-1.0, 1.0);
glTexCoord2f(1.0, 1.0);
glVertex2f(1.0, 1.0);
glEnd();
glutSwapBuffers();
我知道问题在于纹理,因为我可以在屏幕上绘制固体形状。
默认的缩放过滤设置是使用mipmaps。由于您不提供所有MIPMAP级别降低到1×1,也不会切换到不需要MIPMAPPIP的过滤器方法,因此将跳过纹理采样。
您必须将设置过滤器方法添加到非映射的内容,例如:
glTexImage2D(…);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
或提供图像级别的完整堆栈。
也有glTexImage2D
调用的问题:GL_RGB8
不是数据格式的有效令牌。明确的格式令牌仅适用于 internal 格式。但是,对于初学者,无论如何,您可能应该使用未介绍的令牌(只有8
((只有GL_RGB
((仅在真正重要的情况下才能使用明确的大小,例如,例如,对于某些精度要求,或避免用于流纹理更新的转换成本(。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
相关文章:
- dx11 渲染到纹理仅显示透明颜色
- 无法获取要在 OpenGL ES2 中显示的 RGB 纹理
- 如何显示具有 opengl 纹理的灰度图像
- SDL + OpenGL ES 2.0 使用着色器显示纹理
- 如何使用 openGL 在屏幕上显示加载的纹理
- 在 SFML 中不使用动态内存时显示白色纹理代替实际纹理
- 纹理显示为黑色
- 使用两个纹理 SDL2 显示视频
- 纹理未显示
- 渲染到框架/纹理显示为空
- 无法使用 OpenGL 显示纹理
- OpenGL纹理未显示
- 使用OpenGL显示两个对象.纹理不像预期的那样行为
- 试图显示纹理,但只能使用OpenGL获得纯色
- OpenGL:无法显示纹理
- 在openGL(版本>3.3)的屏幕上显示纹理时如何更改纹理的大小?
- QT和OpenGL如何正确集成和显示纹理
- 无法在SDL 2中显示纹理
- 用c++在OpenGL ES中显示纹理有问题
- 为什么我不能在OpenGL中显示纹理