web-dev-qa-db-ja.com

OpenGLで3Dモデル(メッシュ)をアニメーション化する方法は?

OpenGLでモデル(たとえば、人間、歩行)をアニメートしたいと思います。スケルタルアニメーション(トリッキーな数学)のようなものがあることは知っていますが、これはどうですか?.

  1. Blenderでモデルを作成する
  2. Blenderでそのモデルのスケルトンを作成する
  3. 次に、そのモデルとスケルトンを使用してBlenderでウォーキングアニメーションを実行します
  4. そのアニメーションのいくつかの「keyFrames」を取得し、すべての「keyFrame」を単一のモデルとして(たとえば、objファイルとして)エクスポートします。
  5. OpenGL用のOBJファイルローダーを作成します(頂点、テクスチャ、法線、顔のデータを取得するため)
  6. VBOを使用して、OpenGLでそのアニメーションモデルを描画します(そして、VBOで現在の「keyFrame」/モデルを変更する方法についていくつかのトリッキーなアイデアを取得します...おそらくglMapBufferRangeで何か

わかりました。このアイデアはほんの少しのスクリプトにすぎないことは知っていますが、さらに調査する価値はありますか? VBOの「keyFrame」/モデルを変更するための良い概念は何ですか?

私はそのメモリの問題を知っていますが、小さなモデル(そしてあまり多くのアニメーションではない)でそれを行うことができると思います。

14
user2602528

はい、あなたが言及している方法は、初期の3Dビデオゲーム(地震など)で非常に人気がありました。

あなたが説明したのとは少し異なる方法で実装することをお勧めします。アニメーションのすべての可能なフレームのキーフレームをエクスポートする代わりに。より多くの分散キーをエクスポートし、頂点位置を補間します。これにより、メモリ使用量を大幅に減らして、よりスムーズな再生が可能になります。

これには、単一の(ストリーミングまたは動的)VBOが必要です。各フレームで前と次のキーフレームを見つけ、頂点を補間して、結果をVBOにアップロードします。

実際には、シーンのすべてのフレームをOBJとしてエクスポートするようにblenderを設定できます。カスタムツールは、これらのファイルをニースアニメーション形式にコンパイルできます。

ここを読んでください:

9
Justin Meiners