首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在FBX中未加载纹理,使用FBX SDK导出

在FBX中未加载纹理,使用FBX SDK导出
EN

Stack Overflow用户
提问于 2015-09-05 19:51:49
回答 1查看 508关注 0票数 0

我正在做一个OpenGLES2项目(iOS),其中我必须将场景/模型导出为FBX格式,以便可以使用FBX查看应用程序打开它。我已经到了模型加载的时候,法线和材质工作正常,但纹理没有加载。我已经使用iTunes将导出的修复文件和纹理文件粘贴到FBX Review应用程序的文档目录中。以下是我的代码:

材质创建:

代码语言:javascript
复制
FbxString lMaterialName = "material";
FbxString lShadingName = "Phong";
FbxDouble3 lBlack(0.0, 0.0, 0.0);
FbxDouble3 lRed(0.0, 1.0, 0.0);
FbxDouble3 lDiffuseColor(1.0, 1.0, 1.0);
gMaterial = FbxSurfacePhong::Create(pScene, lMaterialName.Buffer());
gMaterial->Emissive.Set(lBlack);
gMaterial->Ambient.Set(lRed);
gMaterial->Diffuse.Set(lDiffuseColor);
gMaterial->TransparencyFactor.Set(40.5);
gMaterial->ShadingModel.Set(lShadingName);
gMaterial->Shininess.Set(0.5);

纹理创建:

代码语言:javascript
复制
gTexture = FbxFileTexture::Create(pScene, "Diffuse Texture");
gTexture->SetFileName("sample.png");
gTexture->SetTextureUse(FbxTexture::eStandard);
gTexture->SetMappingType(FbxTexture::eUV);
gTexture->SetMaterialUse(FbxFileTexture::eModelMaterial);
gTexture->SetSwapUV(false);
gTexture->SetTranslation(0.0, 0.0);
gTexture->SetScale(1.0, 1.0);
gTexture->SetRotation(0.0, 0.0);

创建FBXLayeredTexture:

代码语言:javascript
复制
finalNode->AddMaterial(gMaterial);
FbxLayeredTexture* layeredTexture = FbxLayeredTexture::Create(fbxManager, "layered texture");
layeredTexture->ConnectSrcObject(gTexture);
layeredTexture->SetMappingType(FbxTexture::eUV);
FbxSurfacePhong* surfMaterial = (FbxSurfacePhong*)sampleNode->GetMaterial(0);
surfMaterial->Diffuse.ConnectSrcObject(layeredTexture);

// Creating FBXLayerElementUV in another method
....
fbxMesh->InitControlPoints(objMesh->getVerticesCount());

FbxLayer* meshLayer = fbxMesh->GetLayer(0);
FbxLayerElementUV* lUVElement1 = FbxLayerElementUV::Create(fbxMesh, "UVSet1");
lUVElement1->SetMappingMode(FbxGeometryElement::eByControlPoint);
lUVElement1->SetReferenceMode(FbxGeometryElement::eDirect);
lUVElement1->GetDirectArray().SetCount(objMesh->getVerticesCount());

for (int index = 0; index < objMesh->getVerticesCount(); index++) {
    vertexData* vData = objMesh->getVertexByIndex(index);
    Vector3 vPos = vData->vertPosition;
    Vector3 vNor = vData->vertNormal;
    Vector2 vUV = vData->texCoord1;

    fbxMesh->SetControlPointAt(fbxsdk_2015_1::FbxVector4(vPos.x, vPos.y, vPos.z), fbxsdk_2015_1::FbxVector4(vNor.x, vNor.y, vNor.z), index);
    //fbxMesh->AddTextureUV(FbxVector2(vUV.x, vUV.y)); // For Trial
    lUVElement1->GetDirectArray().Add(FbxVector2(vUV.x, vUV.y));
}
meshLayer->SetUVs(lUVElement1);
// And Finally 
   ...
    finalNode->SetNodeAttribute(fbxMesh);
    finalNode->SetShadingMode(FbxNode::eTextureShading);

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-08-12 04:59:06

在此行中,您应该将"fbxManager“更改为"pScene":

代码语言:javascript
复制
FbxLayeredTexture* layeredTexture = FbxLayeredTexture::Create(fbxManager, "layered texture"); 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32412745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档