Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Assimp是否能够加载3mf文件的嵌入纹理?_C++_Assimp - Fatal编程技术网

C++ Assimp是否能够加载3mf文件的嵌入纹理?

C++ Assimp是否能够加载3mf文件的嵌入纹理?,c++,assimp,C++,Assimp,今天我发现了一个带有嵌入纹理的3mf文件(我指的是嵌入纹理,.png纹理出现在3mf zip中) 由于我目前正在学习Assimp库,我尝试加载它,效果很好,网格加载正确,但是png纹理根本没有加载 Assimp是否能够加载3mf文件的嵌入纹理? 为了在这里提问之前做一些研究,我做了这样的事情来记录assimp加载了什么类型的材料属性(加载我的3mf文件时): /**装载材料**/ 艾斯特林路; 对于(无符号整数i=0;imNumMaterials;i++){ 常量aiMaterial*pMate

今天我发现了一个带有嵌入纹理的3mf文件(我指的是嵌入纹理,.png纹理出现在3mf zip中)

由于我目前正在学习Assimp库,我尝试加载它,效果很好,网格加载正确,但是png纹理根本没有加载

Assimp是否能够加载3mf文件的嵌入纹理?

为了在这里提问之前做一些研究,我做了这样的事情来记录assimp加载了什么类型的材料属性(加载我的3mf文件时):

/**装载材料**/
艾斯特林路;
对于(无符号整数i=0;imNumMaterials;i++){
常量aiMaterial*pMaterial=pScene->mMaterials[i];
如果(pMaterial->GetTextureCount(aiTextureType_DIFFUSE)>0){
if(pmatary->GetTexture(aiTextureType_DIFFUSE,0,&Path,NULL,NULL,NULL,NULL)=AI_SUCCESS){
String FullPath=AppendFileName(GetFileFolder(Filename),String(Path.data));
插入纹理(完整路径,i);
}
} /*
如果要处理所有不同的纹理类型,请使用多个else
*/
}否则{
//如果没有纹理类型与当前的aiMaterial对象匹配,那么我将记录它以查找错误
对于(int e=0;emnumproperty;e++){
aimMaterialProperty*aiMp=pmatary->mproperty[e];
日志(“属性编号”+关联字符串(e)+“:”;
日志(“mKey:+字符串((*aiMp.mKey.data));
日志(“mSemantic:+AsString((*aiMp.mSemantic));
日志(“mIndex:+AsString((*aiMp.mIndex));
日志(“mDataLength:+AsString((*aiMp.mDataLength));
日志(“aiPropertyTypeInfo:+AsString((int)(*aiMp.mType));
String str=String((*aiMp).mData);
日志(“mdatacount:+AsString(str.GetCount());
日志(“-------------------------------------”);
}
}
}
/*************************/
正如你所看到的,我正在打印材料,以便更深入地观察它,然而,由于我对assimp的了解非常少,这对我没有多大帮助

在这里可以找到3mf文件aiMaterial properties的日志:


翻译mKey/aiPropertyTypeInfo后,这两个属性似乎与纹理无关,它只用于描述对象的材质/灯光的计算方式。有人能确认我吗?

目前ASIMP不支持嵌入纹理。你有文件的链接吗?我们可以尝试添加此功能。只需添加一个新问题

以下是问题链接,其中有一个3mf文件示例:
/** Loading material **/
aiString Path;
for (unsigned int i = 0 ; i < pScene->mNumMaterials ; i++) {
    const aiMaterial* pMaterial = pScene->mMaterials[i];
    if (pMaterial->GetTextureCount(aiTextureType_DIFFUSE) > 0){
        if (pMaterial->GetTexture(aiTextureType_DIFFUSE, 0, &Path, NULL, NULL, NULL, NULL, NULL) == AI_SUCCESS) {
            String FullPath =AppendFileName(GetFileFolder(Filename), String(Path.data));
            InsertTexture(FullPath,i);
        }
    } /*
        multiple else if to handle all different texture type 
    */
    }else{
        //If no texture type have match the current aiMaterial object then I log it to find what goes wrong
        for(int e = 0; e < pMaterial->mNumProperties; e++){
            aiMaterialProperty* aiMp = pMaterial->mProperties[e];
            LOG("Property number " + AsString(e) +" :");
            LOG("mKey : " + String((*aiMp).mKey.data));
            LOG("mSemantic : " + AsString((*aiMp).mSemantic));
            LOG("mIndex : " +  AsString((*aiMp).mIndex));
            LOG("mDataLength : " +  AsString((*aiMp).mDataLength));
            LOG("aiPropertyTypeInfo : " + AsString((int) (*aiMp).mType));
            String str = String((*aiMp).mData);
            LOG("mData count : " + AsString(str.GetCount()));
            LOG("---------------------------------");
        }
    }
}
/*************************/