3

波面モデル ファイル (.OBJ および .MTL) を読み込み、頂点/インデックスをレンダリング用に VBO に保存しました。これで、モデルがロードされたときに VBO を 1 回だけ入力するようになりました。私の質問は...この頂点データを再利用してモデルの複数のインスタンスを再描画する最良の方法は何ですか? 現時点では、モデルの各インスタンスの変換行列 (回転、スケーリング、平行移動) を保存draw()し、関連する変換行列を使用して各インスタンスの関数を呼び出しています。

これは完全に間違った方法ですか?同じ結果を達成するためのより良い/代替方法は何ですか?

明らかに、これはオブジェクトがそれ自体に対して静止している非常に基本的なモデルでのみ機能します (つまり、モデルのどの部分も世界の向きに関係なく動いていません)。これが、これを行うためのより良い方法が実際にあると私に信じさせるものです.

私のとりとめのないことが理にかなっていることを願っています...

4

1 に答える 1

4

モデルの位置を変更したいだけなら、変換行列を変更するのが合理的な方法です。以降の OpenGL バージョンでは、インスタンス化された描画を使用して、1 回の呼び出しでさまざまな変換を使用してモデルを複数回レンダリングできます。そうすることで、パフォーマンスが少し向上する可能性がありますが、毎回変換行列を変更するだけのループから始めるのがよいでしょう。点。

モデルを実際にアニメートしている場合は、頂点座標自体を変更する必要があるため、状況は異なります。キーフレーム ベースのアニメーションの場合、各キーフレームを個別のバッファーにロードし、ユニフォームとして提供する時間値を使用して頂点シェーダーに補間を行わせることができます。しかし、この種のことは、モデル全体を単に変換することとは無関係です。

于 2011-04-18T14:35:31.637 に答える