mieki256's diary



2017/03/18() [n年前の日記]

#1 [dxruby] DXRubyのCustomRenderTargetを勉強中その2

_DXRuby開発版 を使ったスクリプト中で、 _tinywavefrontobj を用いて Wavefront形式(.obj + .mtl)の3Dモデルデータを直接読み込んで描画してみたり。

_crt_test05_readobj.rb

こんな感じの結果に。



一応、.obj を直接読んで使えることが確認できた。

ついでに、3D描画部分の背景として、2D画像をフツーに描画できるかどうかもテスト。DXRuby ならこういう描画も可能であることを確認できた。コレ、Ruby + gosu + opengl では、OpenGL描画部分の背景に2D画像を描画できなかったわけで…。いや、もしかすると gosu も書き方次第でできるのかもしれないけど、ググってもヒントが見つからなくて。

さらに、頂点配列、法線配列、uv配列、頂点カラー配列を、別々の頂点バッファにして描画できるか試してみたり。一応描画できてるように見えるけど、これで合ってるのかどうか…。昔は、1つの頂点毎に、頂点座標、法線ベクトル、uv等をまとめてしまったほうが速かったらしいけど、最近のGPUは分かれてるほうが速い事例もあるそうで。まとめたほうがいいのが、分けてあるほうがいいのか、どっちを使ったほうがいいのかちょっと分からんけど。

_GPU本来の性能を引き出すWebGL頂点データ作成法 - Qiita
_wgld.org | WebGL: インターリーブ配列 VBO |

何はともあれ、こんな感じの描画ができるのであれば、例えば 2DのSTGやアクションゲームでも、背景をそれっぽく見せられそうな予感。

jsonと.objのどちらがいいのやら。 :

jsonファイルを解析して頂点配列等を取得するのと、.obj + .mtlファイルを解析して頂点配列等を取得するのでは、どちらがいいのだろう…。

例えば、RubyのjsonライブラリがCで書かれてたりするなら、一旦jsonにしておいて、jsonを読み込んだほうが処理時間も速いのだろうけど。

もっとも、パース(=解析)にかかる処理時間を気にするなら…。jsonになった時点で、もはや中身を眺めて修正したり等はほとんど不可能な状態になるのだから、いっそのことバイナリで保存したり読み込んだりするほうがいいのかな、とも思えてきたり。でも、エディタで開いて一応は内容が見れるテキストファイルと、何が何だか分からない謎バイナリでは、前者のほうが気分的に楽かな…。

頂点カラーを記録できる3Dモデルフォーマットを探していたり。 :

テキストで記述されていて、かつ、頂点カラーを記録できる3Dモデルフォーマットは無いのかなとググってるところ。

ここ数日使っている Wavefront形式は、テキストで記述されてるので解析しやすいものの、頂点カラーについては記録できないみたいで。いや、アプリによっては頂点情報に頂点カラーまで付加してしまうものもあるらしいのだけど…。

そもそも blender上で頂点カラーを指定するのって、どんな操作をすればいいんだろう。ソレ以前に、blenderは、頂点カラーを使える機能があるのだろうか。

仮に blender がそういう機能を持ってないとしても、Wings3Dあたりではどうだろう。Wings3Dは、ゲーム向けのローポリモデルを作成しやすい、という話を見かけたから、頂点カラーも指定できそうな。

課題。 :

今のところテクスチャを使ってるモデルしか描画できないので、テクスチャを使ってないモデル、及び、複数のマテリアル(材質設定)も描画できるようにしたいのだけど、さて、どうすればいいのやら。シェーダを数種類用意して対応するのが妥当なのだろうか。それとも違う方法があるのだろうか…。

ピクセルシェーダ内の計算も、これで合ってるのかどうか…。意味も分からずコピペしただけなので…。 _グーローシェーディング(Gouraud shading) とか _フォンシェーディング(Phong shading) とか勉強しないと、なのかな…。

以上です。

過去ログ表示

Prev - 2017/03 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project