2017/03/31(金) [n年前の日記]
#1 [dxruby][gosu][ruby] COLLADA形式の3Dモデルを読み込むRubyスクリプトを書いた
ここ最近、 DXRuby や gosu + opengl を使って3Dモデルの描画を試しているのだけど、3DCGソフトで作成したモデルデータを読み込んで描画できると、実験としては色々都合がいいので、COLLADA形式(.dae)の3Dモデルデータを読み込めるRubyスクリプトを書いてみたり。
_mieki256/tinydaeparser
モデルデータを json で出力して使ってもいいし、require_relative 'tinydaeparser' して daeファイルを直接読んでもいいし…。まあ、好きなやり方で使える、かなと。
モデルデータを読み込むだけなら、先日、 _Wavefront形式(.obj, .mtl)の3Dモデルを読み込むスクリプト を書いているので、ソレを使えばいいけれど。Wavefront形式は頂点カラーを含めることができないようで。COLLADA形式なら頂点カラーを含めることもできる点が大きな違い、だろうか。たぶん。
もっとも、現状では複数オブジェクトに対応してないし、複数のマテリアルを使った場合にも対応できてないので…。あくまで、描画の実験用に使えなくもないですよ、てな状態ですが。
ひとまず、頂点配列や頂点カラー配列は取得できるようになったから…。HLSLを勉強して頂点シェーダとピクセルシェーダを、などと夢想。
_mieki256/tinydaeparser
モデルデータを json で出力して使ってもいいし、require_relative 'tinydaeparser' して daeファイルを直接読んでもいいし…。まあ、好きなやり方で使える、かなと。
モデルデータを読み込むだけなら、先日、 _Wavefront形式(.obj, .mtl)の3Dモデルを読み込むスクリプト を書いているので、ソレを使えばいいけれど。Wavefront形式は頂点カラーを含めることができないようで。COLLADA形式なら頂点カラーを含めることもできる点が大きな違い、だろうか。たぶん。
もっとも、現状では複数オブジェクトに対応してないし、複数のマテリアルを使った場合にも対応できてないので…。あくまで、描画の実験用に使えなくもないですよ、てな状態ですが。
ひとまず、頂点配列や頂点カラー配列は取得できるようになったから…。HLSLを勉強して頂点シェーダとピクセルシェーダを、などと夢想。
◎ blenderからdaeファイルをエクスポートする際の注意点。 :
最初、blender から .dae をエクスポートして描画しようとしたところ、全然違う場所に描画されて悩んだり。
オブジェクトを移動・回転・拡大縮小すると、一見そこに存在するように見えても、内部では全然違う別の場所、異なる座標で存在している、という状態になるのだな…。
そんな時は、オブジェクトを選択した状態で、下のほうのメニューから、オブジェクト → 適用 → 位置・回転・拡縮、を選んでやればいいらしい。
Wavefront形式(.obj)でエクスポートした際は、そのあたり適用した状態でエクスポートしてくれるようで、先日実験していた時はモデルデータの位置がおかしいことに気づかなかったのだけど。COLLADA形式(.dae)でエクスポートすると、内部で持ってる座標値等は極力弄らず、座標変換するためのMatrix情報を付加した状態でエクスポートするっぽい。故に、今回変な位置に描画されてしまったのだろう。たぶん。
オブジェクトを移動・回転・拡大縮小すると、一見そこに存在するように見えても、内部では全然違う別の場所、異なる座標で存在している、という状態になるのだな…。
そんな時は、オブジェクトを選択した状態で、下のほうのメニューから、オブジェクト → 適用 → 位置・回転・拡縮、を選んでやればいいらしい。
Wavefront形式(.obj)でエクスポートした際は、そのあたり適用した状態でエクスポートしてくれるようで、先日実験していた時はモデルデータの位置がおかしいことに気づかなかったのだけど。COLLADA形式(.dae)でエクスポートすると、内部で持ってる座標値等は極力弄らず、座標変換するためのMatrix情報を付加した状態でエクスポートするっぽい。故に、今回変な位置に描画されてしまったのだろう。たぶん。
[ ツッコむ ]
以上です。