Asimp data structureの紹介

4104 ワード

主な内容は元のウェブサイトから訳してきます.リンクはAsimpです.
データ構造
  • 呼び出しAsimp:Importer:ReadFile、aiImportFileまたはaiImport FileExは、aiSceneに戻ります.ダタの根として
  • デフォルトでは、すべての3 Dデータは右座標系で、openGlと一致しています.D 3 Dという左右の座標系で、flaG aiProcess_を設定します.MakeLeftHanded
  • windding-orderデフォルトはCCWで、aiProcessを設定することができます.Flip WindingOrder to get CW data.
  • UV座標は左下を原点とし、flaG aiProcess_を使用します.FlipUVsは左上角を原点に変更できます.
  • assipライブラリマトリックスはすべて行主順です.openglのapiは列主序、unityも列主序を要求します.
  • Node階層構造
  • sceneはnodeの樹状構造からなり、sceneのroot nodeから各nodeは複数のchild nodesを持つことができ、nodeはparent nodeに対して一つのtransform変換があります.
  • 各node refer toは一つ以上のmeshes、meshesリストはaiScheneに格納され、nodeはindex to referを通じて、複数のnodeはrefer toの複数のmeshをreferすることができます.nodeの中で各refered meshのinstanceはnode座標に対して、カスケード計算でglobal座標を得る必要があります.
  • recursive filter function such as the follwing pspeudiocode
    void CopyNodesWithMeshes( aiNode node, SceneObject targetParent, Matrix4x4 accTransform)
    {
      SceneObject parent;
      Matrix4x4 transform;
      // if node has meshes, create a new scene object for it
      if( node.mNumMeshes > 0)
      {
        SceneObjekt newObject = new SceneObject;
        targetParent.addChild( newObject);
        // copy the meshes
        CopyMeshes( node, newObject);
        // the new object is the parent for all child nodes
        parent = newObject;
        transform.SetUnity();
      } else
      {
        // if no meshes, skip the node, but keep its transformation
        parent = targetParent;
        transform = node.mTransformation * accTransform;
      }
      // continue for all child nodes
      for( all node.mChildren)
        CopyNodesWithMeshes( node.mChildren[a], parent, transform);
    }
    
    Meshes
  • 一つのmeshは一つのmaterialだけを使います.material配列もsceneに存在します.meshはindex refer to materialを通します.
  • aiMeshは一連のdata chanelsから構成されており、導入されたファイルによって決定され、デフォルトではmeshに登場するファイルがあります.aiMesh::m VerstecesとaiMesh:m Facesは必ずあります.importを呼び出すこともできます:readFileの時にいくつかflagsを設定してpost processをして、必要なdata chanelsを計算します.
  • aiMeshは三角と多角形の集合であり、一つのvertexは必ずpositionがあり、またnormalがあり、一つのtangentまたはbitangentがあり、ゼロto AI_があります.MAX_NUMBER_OF_TEXTURRECOORDS(4 at the moment)texture coords andゼロto AI_MAX_NUMBER_OF_COLOR_SETS(4)vertex colors.
  • この他に、一つのmeshにはbones
  • のグループがあります.
    Material
  • materialのデータはaiScieneの中で1組のaiMaterialに保存します.一つのmaterialは一つの組のpropertiesからなります.
  • Bones
    一つのmeshは、各boneがnameと一つのグループに影響を与えることができるverticesを持っているbonesグループがあります.それに対してmeshのlocal tranformです.
    skeeleton hierarchy for a meshを作成します.
    a) Create a map or a similar container to store which nodes are necessary for the skeleton. Pre-initialise it for all nodes with a "no".
    b) For each bone in the mesh:
    b1) Find the corresponding node in the scene's hierarchy by comparing their names.
    b2) Mark this node as "yes" in the necessityMap.
    b3) Mark all of its parents the same way until you 1) find the mesh's node or 2) the parent of the mesh's node.
    c) Recursively iterate over the node hierarchy
    c1) If the node is marked as necessary, copy it into the skeleton and check its children
    c2) If the node is marked as not necessary, skip it and do not iterate over its children.
    
    アニメイト
    一つのsceneはゼロto x Animationationriesがあり、一つのanimationはkeyframe sequencesのセットであり、各セットのsequenceはしばらくの間に単一のnodeのtransformの変化を述べています.このようなアニメーションは一般にskeleton of a skined meshを駆動するために使われます.もちろん他の使用法もあります.
    一つのaiAnimationはdurationとdurationと他のタイムスタンプは全部tickによって表していますので、真実の時間を知るためには、aiAnimationで除算します.
    aiAnimationにはaiNodeAnimのセットがあります.各aiNodeAnimのnameはそのnodeに影響を与えることを表明しています.三つのグループのkey sequenceが共存しています.一緒にmodeのtransformation matrixを記述します.
    Textures
    通常texturesには別のファイルがあります.その後、いくつかのファイルフォーマットがmodel fileに埋め込まれています.このtexturesはaiTextureにロードされます.
    二つの場合があります
  • texure非圧縮.色は直接に存在します.aiTexture:mWidth*aiTexture:mHeight aiTexl structures.各aiTexelは一つのピクセルを表します.保存のフォーマットはRGBBA 8888です.
  • aiTexture:mHeight==0であれば、圧縮フォーマットを表します.例えばDDSやPNGaiTexture:mWidth specifies the size of the texture data in bytes,aiTexture:pcData is a pointer to the raw image data and aiTexture:ach Formatont hite is eigheroed or contains the most most most command fiteexture of