LightwaveファイルからXファイルへコンバートするプラグインはいろいろ問題が

Posted on Wed 11 February 2009 in DirectX

Lightwaveの公式プラグインで、Xファイル形式でモデルを出力してくれるDirectX Exporterというのがあるのだが、、、
ダメダメすぎて、ストレスがたまる。

  • 出力したファイルにメッシュ情報がのってない。空のフレームだけ
  • (おそらくだけど)IKをつかってないモーションモデルをBake IKで出力させるとLightwaveまで巻き込んで落ちる
  • ようやく、メッシュ情報がのったファイルが出力されたと思ったらファイルが壊れててViewerで再生できない・・・・

直にLightwaveのファイルをさわったほうがはやい、というかさわらざるをえない
Lightwaveデベロッパー情報
http://www.dstorm.co.jp/products/lw8/developer/game/index.htm

DirectX10でXファイルのヘルプ関数が無くなり、これから無くなっていくであろうファイルフォーマットなので
Xファイルにこだわることも無いのかもしれない。


Xファイルのフォーマット(5)

Posted on Sat 07 February 2009 in DirectX

今回はスキンメッシュに使うテンプレートの説明。

    SkinMeshHeader {
        一つの頂点に対して、影響を与えるボーンの最大数;
        一つの面に対して、影響を与えるボーンの最大数;
        ボーンの数;
    }
    SkinWeight {
        ボーン(フレーム)の名前;
        重みの数;
        重みを与える頂点; //繰り返し
        0~1の値の頂点に対する重み; //繰り返し
        メッシュの頂点をボーンの空間にトランスフォームする4x4行列;
    }

SkinMeshHeaderの中にあるボーンの数だけSkinWeightは定義されているはずです。
AnimationKeyでボーンが変形されたとき、重みにあわせて変形量を変える事によって
スキンメッシュを実装します。


Xファイルのフォーマット(4)

Posted on Thu 05 February 2009 in DirectX

Xファイルのフォーマット(1) Xファイルのフォーマット(2) Xファイルのフォーマット(3)

今回は、アニメーションのまとめ。
アニメーションは以下のように表されます。

AnimationSet AnimationSet_name {
    Animation Animation0 {
        { frame1 } //フレーム名frame1のアニメーション
        AnimationKey {
            キータイプ;
            キー数;
            キー値;データ個数;データ;, //繰り返し
        }
    }
}

AnimationSetは、一つのアニメーションを表し、1\~N個のAnimationを持ちます。
Animationは、一つのフレームについての、キーアニメーションデータを格納するAnimationKeyを持ちます。
AnimationKey内のキータイプが0の場合は回転、1の場合はスケーリング、2の場合は平行移動、4の場合は変換行列を表します。

  • 回転の場合は、w,x,y,zの順でクォータニオンデータが格納されています
  • スケーリングの場合は、x,y,zの順で拡大縮小データが格納されています
  • 平行移動の場合は、x,y,zの順で平行移動値データが格納されています
  • 変換行列の場合は、4x4の回転 …

Continue reading

Xファイルのフォーマット(3)

Posted on Wed 04 February 2009 in DirectX

Xファイルのフォーマット(1) Xファイルのフォーマット(2)

学校の課題でXファイルのアニメーションをOpenGLで再生することになりそうなので、Xファイルのフォーマットの続きをまとめてみる。

今回はフレームについて、
フレームは、メッシュの階層構造をあらわしたり、スキンメッシュにおけるボーンをあらわしたりします。
フレームの形式はは、このようになっている。

Frame Aframe { // 名前を持つ場合もある、この場合はAframeがこのフレームの名前である。
    FrameTransformMatrix {
        4x4行列
    }
    [ Meshes ] and/or [ More frames]
}

[フレームは、4x4行列1つを必ず持ち、メッシュを0\~N個、子フレームを0\~N個持ちます。
行列は、自分の空間から親の空間へ、座標変換を行うときに使用します。

最小のフレームを持つXファイルの形式は以下のようになります。

Frame {
    FrameTransformMatrix { //単位行列なので変換は行わない
        1.0, 0.0, 0.0, 0 …

Continue reading

DirectShowムービー表示

Posted on Fri 09 November 2007 in DirectX

ただムービを再生するだけだと別ウィンドウで表示されてしまうのでこれをIvideoWindowで操作して子ウィンドウとすれば任意のウィンドウ内でムービーを再生させることができる。

IGraphBuilder::QueryInterface()でIVideoWindowを作れるのだが上手くいかない。。。

IGraphBuilder::RenderFile()の後に
IGraphBuilder::QueryInterface()でIVideoWindowを作らないとダメなようだ。

次に
音は出るが画像は出ない状態に。。。
しかし、タイトルバーをクリックし続けると、表示される。

ムービーは子ウィンドウとして表示されるので、
親ウィンドウとなるウィンドウスタイルに
WS_CLIPCHILDREN
を指定しなければならなかった。 考えてみたら当然だったが・・・

参考リンク
http://www.geekpage.jp/programming/directshow/renderfile.php


Xファイルのフォーマット(2)

Posted on Sun 25 March 2007 in DirectX

//これはコメントです。  
#これもコメントです。  
//この例は、正しいポリゴンでない可能性があります。  
Mesh (ここにメッシュの名前をつけることもできる。){  
    3; //頂点の数  
    0.00000;271.38129;0.00000;, //頂点1の座標  
    0.00000;240.92551;-153.11031;, //頂点2の座標  
    0.00000;-128.71561;-400.09680;; //頂点3の座標

    1; //面の数  
    3;0,1,2;; //インデックスの数;インデックスの配列

    //ここまでが必須要素です。

これに付随してオプションのデータをつけることができます。
使用できるオプションのデータは、
・MeshFaceWraps (今では使われてないらしい)
・MeshTextureCoords
・MeshNormals
・MeshVertexColors
・MeshMaterialList
である。

/////////////////////////////////////////////////////////////  
//MeshTextureCoordsはメッシュのテスクチャ座標を定義する。  
template MeshTextureCoords …

Continue reading

Xファイルのフォーマット(1)

Posted on Sat 24 March 2007 in DirectX

Xファイルの一番上には、 xof 0302txt 0064 というような可変長ヘッダーがある。
\"xof\"は、マジック番号と呼ばれる。
\"03\"は、メジャーバージョン3をあらわす。
\"02\"は、マイナーバージョン2をあらわす。
\"txt\"は、そのXファイルが、テキスト形式であることをあらわす。
\"txt\"の代わりに、バイナリファイルの\"bin\"、MSZip圧縮テキストの\"tzip\"、MSZip圧縮バイナリの\"bzip\"、が選べる。
\"0064\"は64ビット浮動小数点をあらわす。
代わりに、\"0032\"を選ぶとができる。

Xファイルはテンプレート形式で書かれている。

template {    
  メンバー1;  
  メンバー2;  
  .  
  .  
  .  
}
template Vector {  
  <3D82AB5E-62DA-11cf-AB39-0020AF71E433>  
  FLOAT x;  
  FLOAT y;  
  FLOAT …

Continue reading