2016-12-12 15 views
0

サイドプロジェクトとして2dゲームエンジンを作成しています。私はいくつかの実験と研究を行ってきましたが、同じVBOでバッチ(複数のオブジェクトを描画する)を提案している多くの人が出てきました。たとえば、自分のシーンにたくさんのツリーがある場合、同じメモリフットプリントを持つため、すべてのツリーを同じVBOに配置してから、単一のglDrawArraysを使用してすべてのツリーを描画できます。OpenGL VBOのバッチベストプラクティス

これは問題ありませんが、それは意味があります...しかし、私はどのように私は各ツリーのために異なる変換を送信することができますか?シェーダーにはどうすればいいですか?または、私はCPU上で計算を行い、VBO全体をそれぞれ描画すると仮定してこのアプローチですか?あなたが探している用語がInstancingある

OpenGL VAO best practices

OpenGL How Many VAOs

答えて

0

:ここ

は、私が見てきた主な質問の2つです。

ツリーのモデルを含むVAOを作成し、モデルマトリックスをユニフォームに渡すのではなく、インスタンス化された頂点属性としてVAOに配置します。次に、ツリーの各インスタンスが異なるモデル行列で描画されます。

モデルシェイダーを使用してフィードバックを変換して、モデルビュー製品を、各インスタンスの各頂点ごとに計算するのではなく、フレームごとにインスタンスごとにVAOに更新して格納することができます。

+0

ああ、私の質問では少し不明だったかもしれません。私はインスタンス化を認識していましたが、各ツリーのモデルはわずかに異なるかもしれませんが、同じテクスチャを使用しています。おそらく段ボール箱が良い例かもしれません。私が第二のリンクへの応答を見ると、最初の質問に対する彼の答えは、私が何を話しているかです。 – TomShar

+0

あなたが何を求めているのかは不明です。アニメーションについて尋ねるかどうかは、静的なジオメトリについて話しています。段ボールごとに、実際にインスタンス化して描くことができると聞こえます。 – ybungalobill

+0

私は彼が1つのVBOで複数のオブジェクトを次々と持つことを理解していました。glDrawMulti *()を使用して、異なる形状のオブジェクトをすべて描画します(同じテクスチャを使用します)。私が求めているのは、あなたがちょうど役に立たない同じ位置にVBOのすべての項目を描画するのと同じように、それらに異なる変換を与える方法です。あなたが同じことを何度もレンダリングしようとしている場合にのみ、あなたが提案したようにインスタンス化することが推奨されます。私はすべてのオブジェクトが単一のVBOにあるので、1つのglDraw呼び出しを使用して異なる項目をレンダリングすることを求めています。 – TomShar

関連する問題