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

玄箱に組み込んだSeagateのHDDのチェック

Posted on Mon 19 January 2009 in サーバー管理

Seagateの1.5TのHDD(ST31500341AS)に、ファーム関係で問題があるらしい。
http://pc.watch.impress.co.jp/docs/2009/0119/seagate.htm

 # apt-get install hdparam
 # hdparm -i /dev/hda

で、HDDの型番とシリアル番号をチェック。

CCとかLCがシリアル番号に入ってたらセーフ
http://seagate.custkb.com/seagate/crm/selfservice/search.jsp?DocId=207957


ファイルを開くダイアログを開いたときは、カレントディレクトリが変わってる

Posted on Thu 15 January 2009 in Windows

題名の通りです。

GetOpenFileNameなどでダイアログを開くとカレントディレクトリが変わってしまうようです。

相対パスで指定したファイルが開けない場合があったので調べてみると、上の通りでした。
何時間無駄にしたことやら・・・


自動的にメニュー項目が非活性(グレーアウト)されるのを防ぎたい時は

Posted on Wed 07 January 2009 in Windows

自動的にメニュー項目が非活性(グレーアウト)されるのを防ぎたい時は
CWnd::m_bAutoMenuEnable = FALSE;
を行っておく。

MSDN:
http://msdn.microsoft.com/ja-jp/library/dz33x6wb(VS.71).aspx


CViewのアクティブイベント

Posted on Tue 23 December 2008 in Windows

CViewのアクティブイベントは、CView::OnActivateView()で拾える。

OnActivate()とかOnMDIActivate()とかOnNcActivate()だとだめだった。
調べてみたが結局OnActivateView()が正解みたいだ。


CMultiDocTemplateの子ウィンドウのメニュー変更

Posted on Mon 22 December 2008 in Windows

CDocument::GetDefaultMenu()をオーバーライドし、
自分で作成したHMENUを返せばよい。


DLLにおけるSTLの利用

Posted on Fri 28 November 2008 in Windows

http://d.hatena.ne.jp/hiroki0/20081109/1226244221
↑のヒープのエラーがでる問題だが、DLLとEXE間でSTLvectorのやり取りをしてたのが原因らしい。

STLは、inline展開されるので、DLL側とEXE側と2つバイナリコードが生成され、
これが実行時に食い違うと判定されて、ヒープのエラーが出ていたようだ。

STL DLL でググるとたくさんページが出てきた。

参考リンク
http://support.microsoft.com/kb/172396/ja
http://lamoo.s53.xrea.com/develop/tips/dlltips.html