VRエンジン作成日記

ひたすらVRエンジンを作っていきます

OBJファイルを画面に表示する機能を追加

プロジェクトビューからOBJファイルを画面に追加できるようにした。また、OBJファイル読み込み機能を使って複雑なメッシュを読み込んだ時に、UIスレッドが止まらないようにした。具体的には、OBJファイルの各行を文字列として読み込むメソッドの実行時に、引数で指定した行数を読み込む度にsetTimeoutで待ち時間を入れるようにした。こうすることで、UIスレッドが停止してしまう問題を解消できる。この構造を使う場合はメソッドの実行完了を通知するために、引数でコールバック関数を一緒に指定する必要が出てくる。

今のところOBJファイルのフォーマットで気になることがある。WebGLのシェーダでは頂点情報に紐づける形で、法線、テクスチャ座標等の追加の情報を持つ構造になっている。頂点ごとに紐づいた情報のかたまりが、それぞれ1つずつ頂点シェーダに渡されるような仕組みになっている。しかしOBJファイルのフォーマットでは、法線、テクスチャ座標等の情報を紐づける先が頂点ではなく、インデックス値になっている。この情報の持ち方を考慮せずに、インデックス値に紐づいた2つ目以降の情報を雑に削ってしまっても、多くの場合、破綻なく画面に表示されるようだ。ただ、今のところの実装では、UnityのOBJファイルのインポート後のメッシュデータと見比べると差がある。うまく違いを吸収するにはどうしたら良いかという部分で悩みがある。

・関連するコミット

add: obj file to scene feature · hikipuro/tea.js@3e166ee · GitHub