c++ - OGRE 异常(7:InternalErrorException):在 FreeImageCodec::decode 中解码图像时出错

标签 c++ opengl 3d textures ogre

我正在使用 Ogre 3D 1.9,我正在尝试加载包含在 resource.cfg 文件指向的文件夹中的网格。该文件夹包含子文件夹,它们将 .mesh 文件、.material 文件和纹理分开。以下是 resource.cfg 文件的内容:

# Resources required by the sample browser and most samples.
[Essential]


# Resource locations to be added to the default path
[General]
FileSystem=media
FileSystem=media/materials/scripts
FileSystem=media/materials/textures
FileSystem=media/models

在此之后,我使用以下内容声明并初始化网格、 Material 和纹理:

Ogre::ResourceGroupManager::getSingleton().declareResource("ram.mesh", "Mesh", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::NameValuePairList());
Ogre::ResourceGroupManager::getSingleton().declareResource("char_ram_col.png", "Font", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::NameValuePairList());
Ogre::ResourceGroupManager::getSingleton().declareResource("char_ram_nor.png", "Font", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::NameValuePairList());
Ogre::ResourceGroupManager::getSingleton().declareResource("ram_skin.material", "Material", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::NameValuePairList());
Ogre::ResourceGroupManager::getSingleton().declareResource("ram_skin_eyelids.material", "Material", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::NameValuePairList());
Ogre::ResourceGroupManager::getSingleton().declareResource("ram_skin_eyes.material", "Material", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::NameValuePairList());
Ogre::ResourceGroupManager::getSingleton().declareResource("ram_skin_horns.material", "Material", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::NameValuePairList());

Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();

然后我将网格附加到一个节点:

Ogre::Entity *entity = scene->createEntity("LocalMesh_Ent", "ram.mesh");
Ogre::SceneNode *cube = node->createChildSceneNode("ram.mesh", Ogre::Vector3(x, y, z));
cube->attachObject(entity);

其中 cube 是之前创建的 SceneNode。

我在加载纹理时遇到问题。代码构建没有任何问题,但是当我运行它时出现以下错误(在日志文件中):

OGRE EXCEPTION(7:InternalErrorException): Error decoding image in FreeImageCodec::decode at ..\..\..\..\OgreMain\src\OgreFreeImageCodec.cpp (line 419)

网格和 Material 创建正确,例如,如果我评论有关纹理的部分。

有人知道问题出在哪里吗?

第二个问题:我读到 .png 文件必须声明为 Font,但还有 Texture 选项(效果不佳)。对吗?

最佳答案

其实我发现了问题。包含纹理的 .png 文件实际上并不是真正的 .png 文件。打开它并用 Gimp 重新保存它解决了我的问题。

我花了一些时间来解决这个问题,因为文件没有损坏,考虑到我可以使用图像查看器毫无问题地打开它。

考虑到我刚刚从互联网上下载了一个 Blender 模型,并保存为网格文件,我不知道是什么导致了这种问题。

关于c++ - OGRE 异常(7:InternalErrorException):在 FreeImageCodec::decode 中解码图像时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29917809/

相关文章:

c++ - 如何在没有缓冲的情况下使用 parquet-cpp 编写流式/面向行的数据?

opengl - 如何为 rust 设置VertexAttribPointer的偏移量?

javascript - 3D效果jquery css3

c++ - 编译时将树转换为元组

c++ - 具有不同长度的两个 vector 数组的线性插值

windows - 如何在qmake项目中检测Qt是OpenGL还是Angle版本?

C++:使方法每次都返回相同的对象

javascript - 我如何在 webgl 中使用 stride?

c++ - 如何在 C++ 中为曲面创建邻接矩阵

c++ - 类在多个文件上的使用 .h .cpp main.cpp