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一つの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を作成します.
一つの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
データ構造
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);
}
MeshesMaterial
一つの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にロードされます.
二つの場合があります