3

私はこれでしばらく髪を引き裂いています。バッチ処理 (インスタンス化なし) を使用して、多くのスプライトを効率的にレンダリングする OpenGL 3.2 コア (非推奨のものはありません!) の方法が必要です。

ジオメトリのみでこれを行う例を見たことがありますが、テクスチャも送信する必要があり、これを行う方法がわかりません。

実際に動作しているよくできた例が必要です。そして、モノゲームなどの他のライブラリがどのように機能するかを見ると、あまり役に立ちません。なぜなら、私が興味を持っているのはGLコードだけであり、非推奨のものを含める必要がないからです。

基本的に、すべてテクスチャを持つ数千以上のスプライトを効率的にレンダリングできるようにしたいと考えています。テクスチャは単なるスプライト シートなので、そのスプライト シートの領域をレンダリングするように指示するだけです。

プログラマブル パイプラインで利用できる資料の量にがっかりしています。私は絶対にやりたくないのですが、ネジ止めして固定パイプラインを使用する方がはるかに簡単だと思われるところまで。

ええ、私が望むことを行う完全な例はありますか? それとも、もっと知識のある人が書いてくれますか? :)

多くの例は、「ああ、これが 1 つの三角形をレンダリングする方法です」です。それは素晴らしいことですが、三角形/四角形を 1 つだけレンダリングする必要はありません。それに加えて、テクスチャを適用する必要があります。

VBO/VAO/EBO を使用した例

また、これは、コードが glTexPointer などを使用できないことを意味しますが、生の VBO/VAO でのみ使用できます...

4

1 に答える 1

3

この質問を見て、ポイントと gl_PointSize を使用して「スプライト」レンダリングを行う小さなプログラムを作成することにしました。「インスタンス化」ではなく「バッチ処理」が何を意味するのかよくわかりませんが、私のプログラムでは glDrawArraysInstanced() 呼び出しを使用して、VBO を可変サイズにすることなく複数のポイントをレンダリングできるようにしています。私のコードもスプライトをテクスチャ化しませんが、簡単に追加できます (アクティブなテクスチャ インデックス (glTexSubImage への呼び出し中にアクティブだったインデックス) を、glUniform1i を使用して GLSL sampler2D にアップロードします)。

とにかく、ここに私が書いたプログラムがあります: http://litherum.blogspot.com/2013/02/sprites-in-opengl-programmable-pipeline.htmlあなたがそれから学べることを願っています!

于 2013-02-28T06:47:38.853 に答える