gpt4 book ai didi

c++ - Assimp 加载发射图

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:55 35 4
gpt4 key购买 nike

我正在使用 Assimp 加载我的模型和网格,到目前为止它一直运行良好。我正在尝试从从 blender 导出 .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() 只是一个函数,它获取 mtl 文件中与 aiTextureType 对应的纹理路径,如果之前已经加载过,则可以从文件中加载它们,也可以从缓存中获取它们.同样,这对除发射纹理之外的所有内容都完全有效。 (另外,请原谅检查 vector 长度并获取第一个 vector 的笨拙方法,我需要找出一种更好的方法来检查将来是否已加载该类型的纹理)。

我在想 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 识别自发光纹理(在早期版本中,它处理这两个关键字)

关于c++ - Assimp 加载发射图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40827314/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com