900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > FBX 解析 材质与贴图

FBX 解析 材质与贴图

时间:2019-12-20 13:43:25

相关推荐

FBX 解析 材质与贴图

   本文采用 AUTODESK的FBX SDK来解析fbx文件,使用语言为python。

   下面结合代码解析出fbx文件中的材质与贴图,以及简单介绍涉及到的类的关系。

1.sdk中的一些基本概念

   FbxScene

   该类包含了整个3D场景的描述。对文件进行解析时,要先获得场景对象,然后在解析该对象里的内容。

   FbxObject

   大多数FBX对象的基类。对象之间通过connections进行连接。通过连接,对象间相互关联以形成层次结构或结构。即fbx的场景中对象的关系都表示为对象的连接。

   FbxObject提供了Property(属性)这种机制来描述场景中对象的特征。

   FbxProperty

   用来保存属性的类

   ClassID

   用于在运行时区分对象的内部类。每个类都有唯一的ClassId

2.解析fbx文件

   下面是本次解析内容(mesh的名字,材质名称,贴图名称,材质贴图引用关系)的的关系结构图:

1)加载scene

lSdkManager,lScene = InitializeSdkObjects()LoadScene(lSdkManager,lScene,"xxx.FBX")

2)获取节点node以及名字

   scene中包含了所有node中的root节点。

rootNode = pScene.GetRootNode()

   node之间通过树状结构连接,通过 GetChild() 与递归即可获得所有node

if rootNode:for i inrange(rootNode.GetChildCount()):ChildNode = rootNode.GetChild(i)if ChildNode:AllNodes.append(ChildNode)FindChildNodes(AllNodes,ChildNode)

   获取node名字

lNode.GetName()

3)获取材质Material以及名字

   获取材质

NodeMaterial = lNode.GetMaterial(0)

   获取材质名字

NodeMaterial.GetName()

4)获取贴图Texture以及文件路径

   贴图可以直接从scene中获得

tex_num = lScene.GetTextureCount()#print(tex_num)for i inrange(tex_num):tex = lScene.GetTexture(i)

   贴图文件路径

path = tex.GetFileName()

5)获取材质,贴图关系

   根据材质拥有的属性去获取相应的关系

#DiffuseTextureslProperty = pMaterial.FindProperty(FbxSurfaceMaterial.sDiffuse)#BumpTextureslProperty = pMaterial.FindProperty(FbxSurfaceMaterial.sBump)

   可以通过关系去获取相应材质

num_textures = pProperty.GetSrcObjectCount(FbxCriteria.ObjectType(FbxTexture.ClassId))texture = pProperty.GetSrcObject(FbxCriteria.ObjectType(FbxTexture.ClassId),i)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。