Assimp 加载发射图

Assimp Loading Emission Map

我正在使用 Assimp 来加载我的模型和网格,到目前为止它一直运行良好。我正在尝试从从搅拌机导出 .obj 文件时生成的 .mtl 文件加载发射贴图。它可以很好地加载漫反射贴图、法线贴图和镜面反射贴图,但由于某种原因,它似乎根本无法在文件中找到发射贴图。

这是 .mtl 文件:

# Blender MTL File: 'basiclevel.blend'
# Material Count: 1

newmtl megaGem
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd Textures\gemB_diff.jpg
map_Ke Textures\gemB_emit.jpg
map_Ks Textures\gemB_spec.jpg
map_Bump Textures\gemB_norm.jpg

(我缩短了文件路径,因为它们很长而且很不清楚,漫反射贴图、法线贴图和高光贴图加载和渲染都很好)

我正在像这样加载纹理:

std::vector<glTexture> emissionTextures = loadTextures(
    material,
    aiTextureType_EMISSIVE,
    MAP_TYPE::EMISSION
);
meshTextures.insert(
    meshTextures.end(),
    emissionTextures.begin(),
    emissionTextures.end()
);
if (emissionTextures.size() > 0) {
    meshMaterial.emissionTexture = emissionTextures[0];
}

其中loadTextures()只是一个函数,获取aiTextureType对应的mtl文件中的纹理路径,或者从文件中加载它们,或者如果之前加载过它们,则从缓存中获取它们。同样,这对除发射纹理之外的所有内容都完全有效。 (另外,请原谅检查向量长度和获取第一个向量的笨拙方法,我需要找出一种更好的方法来检查将来是否已加载该类型的纹理)。

我在想 aiTextureType aiTextureType_EMISSIVE 可能没有正确对应 mtl map_Ke 标签?这可以解释为什么我的 ResourceManager 甚至不尝试加载它。

我应该在这里检查的 aiTextureType_EMISSIVE 是正确的吗?如果没有,我应该如何检查我的 obj 文件中对应的 material 文件中的发射贴图?

这是 assimp (https://github.com/assimp/assimp/issues/804) 的一个已知错误,已解决。但是,如果您像我一样使用旧版本,则 map_Ke 标签不会映射到 aiTextureType_EMISSIVE。解决方案是在您的 .mtl 文件中使用关键字 map_emissive,assimp 可识别发光纹理(在早期版本中,它处理这两个关键字)