【问题标题】:OpenGL texture, doesn't like my bmpOpenGL纹理,不喜欢我的bmp
【发布时间】:2010-12-01 23:39:14
【问题描述】:

别担心,我不想问如何使用纹理。 :)

我的问题是: 我正在使用几种纹理。但是如果我想像这样更改文件名:

(LoadBMP("grass.bmp", textureImage[3])) // I can see the grass

(LoadBMP("parkett.bmp", textureImage[3])) // No texture, only white color

两张图片在同一个目录下,没有错误提示。

有什么想法吗? 谢谢 索尼娅 (OpenGL,Visual Studio C++ 2010)

【问题讨论】:

  • LoadBMP 不是 OpenGL 函数,您还没有提供足够接近的上下文来确定实际发生的情况。如果在 OpenGL 中未设置纹理,则“仅白色”是返回的默认值,因此假设加载失败是非常安全的。至于细节,您必须查看 LoadBMP - 只需使用调试器单步执行它并检查发生了什么。

标签: opengl textures


【解决方案1】:

很可能,这些纹理使用不同的格式(.bmp 不仅仅是一种格式)并且您的函数只支持一种格式。

最简单和最好的解决方案是使用一个好的库来加载你的纹理,而不是一些神秘的LoadBMP。我推荐SOIL - Simple OpenGL Image Loader. 只需将其添加到您的项目中,您就可以通过单个函数调用将任何bmpjpgpng 纹理加载到OpenGL 纹理ID。

【讨论】:

  • 您好,感谢您的回答。问题是,这是一个大学项目,我必须使用我教授的 LoadBMP。还有没有其他可能?
  • @Sonja:确保两张图片都是bmp 格式怎么样?
  • 尝试:用 GIMP 打开坏位图,另存为 24 位 BMP 文件名,用新文件重试。我无法确切知道发生了什么,因为我既不知道位图也不知道 LoadBMP 的内容。
  • 嗯,我在PhotoFiltre中打开了图片并保存为BMP。所以它应该是正确的格式,不是吗?
  • 我不知道什么是“正确的格式”,正如“LoadBMP 理解的任何内容”所理解的那样。如果您的图像是 8 位 BMP,那么在某些应用程序中打开和保存可以将其保存为与以前相同的格式。确保保存为 24 位 BMP,这是最可能的选择。
【解决方案2】:

可以假设您的第二个 BMP 的内部数据格式错误(非 BGR 或类似的格式)。同意 Kos - 您应该尝试为此目的使用一些库。有很多他们 - SFMLSDL_imageDevIL...

【讨论】:

    【解决方案3】:

    非工作纹理幂的维度是 2(即 1、2、4、8、16、32、...)吗?如果没有,那么这就是它不起作用的原因。缩放或填充。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多