场景数据

Simplygon python API提供了类spScene来表示一个场景,一个场景通常包含材质、贴图、骨骼以及网格模型。一个场景默认包含一个场景根节点spSceneNode,一张材质表spMaterialTable,一张纹理表spTextureTable,一张骨骼表spSceneBoneTable和一个选择集表spSelectionSetTable。如下图:
image

场景类spScene

可使用如下方法来创建一个场景类spScene

def CreateScene(sg : Simplygon.ISimplygon) -> Simplygon.spScene:
  sgScene = sg.CreateScene()

场景类spScene提供了通过路径来获取场景中的节点spSceneNode的方法:

def GetNodeFromPath(self, path: str) -> spSceneNode:
    pass

场景节点类spSceneNode提供了GetPath方法来获取节点的路径。
场景类spScene还提供了SaveToFile方法将场景保存成二进制文件:

def SaveToFile(self, path: str) -> bool:
    pass

同时提供方法LoadFromFile来从之前保存好的二进制文件中加载场景:
def LoadFromFile(self, path: str) -> bool:
pass

场景节点类spSceneNode

Simplygon python API提供基类 spSceneNode来表示场景中的一个节点,可通过如下方法来创建一个场景节点类spSceneNode:

class ISimplygon(object):
  def CreateSceneNode(self) -> Simplygon.spSceneNode:
      return _Simplygon.ISimplygon_CreateSceneNode(self)

每个场景节点对象都可以通过名称来从场景对象访问,场景节点对象提供用户如下方法来操作其子节点:

class spSceneNode(spObject):
  def GetChildCount(self):
      pass

  def GetChild(self, index):
      pass

  def FindNamedChild(self, name):
      pass

  def AddChild(self, child):
      pass

  def RemoveChild(self, child):
      pass

  def RemoveChildren(self):
      pass

  def HasChild(self, child):
      pass

场景节点同样提供了GetPath方法来获取该节点在场景中的路径,每个场景节点保存了其相对父节点的相对变换,这个变换矩阵可通过如下方法获取:

class spSceneNode(spObject):
  def GetRelativeTransform(self):
      pass

场景节点类也提供了方法来获取其在场景中的绝对变换矩阵:

class spSceneNode(spObject):
  def EvaluateDefaultGlobalTransformation(self, global_transform):
      pass

上图中的RootNode是一个场景节点类对象,当创建场景对象时会自动创建场景根节点对象。任何场景节点对象必须通过放置在根节点对象的下方层次结构中来添加到场景中。

场景模型类spSceneMesh

Simplygon api提供spSceneMesh代表场景中的模型节点,spSceneMesh继承自场景节点类spSceneNodespSceneMesh可以通过调用Simplygon的api接口

class ISimplygon(object):
  def CreateSceneMesh(self) ->Simplygon.spSceneMesh:
    pass

创建得到。要为spSceneMesh设置几何数据,则可通过SetGeometry方法来设置。

class spSceneMesh(spSceneNode):
  def SetGeometry(self, geometryData : Simplygon.IGeometrydata):
    pass

材质表IMaterialTable

Simplygon场景spScene通过维护材质表IMaterialTable来维护场景中的材质,通过下面的方法可以获得该场景中的材质表:

class spScene:
   def GetMaterialTable(self) -> Simplygon.IMaterialTable:
      pass

任何为场景创建的材质都必须添加到材质表中,通过使用

class spMaterialTable:
  def AddMaterial(self, material : Simplygon.IMaterial) -> int:
    pass

上述AddMaterial方法来将材质添加到材质表中,该函数会返回一个唯一的材质id,它被用于给几何数据IGeometryData设置材质,注意:Simplygon场景中的模型的每个三角形面片都需要指定一个对应的材质id。

贴图表ITextureTable

Simplygon场景spScene通过维护贴图表ITextureTable来维护场景中的纹理贴图,它被用户添加或缓存材质着色器网络需要用到的纹理贴图。可通过场景spScene的GetTextureTable方法来获取场景中的纹理表:

class spScene:  
  def GetTextureTable(self) -> Simplygon.ITextureTable:
    pass

要往纹理表中添加贴图,可以通过贴图表ITextureTableAddTexture方法:

class spTextureTable:
  def AddTexture(self, texture :Simplygon.ITexture):
    pass