0

OpenGL ES 2.0 を使用して、単純なレンダラーを独自に作成しました。基本的に、これは特定のスプライト テクスチャに従ってクワッドをレンダリングするための単なるクラスです。詳しく説明すると、四角形を表すオブジェクトを受け入れるのは、実際には 1 つのオブジェクトにすぎません。各クワッド オブジェクトは、ワールド トランスフォームおよびオブジェクト トランスフォーム マトリックスを維持し、指定されたフレーム数にわたってそれらをトランスフォームするためのメソッドを提供し、スプライトへのテクスチャ オフセットも指定します。このクワッド クラスは、行列に対して実行する変換操作のリストも保持します。レンダラー クラスは、クワッドからこれらすべてのプロパティを読み取り、VBO を設定してレンダー リスト内のすべてのクワッドを描画します。

例えば:

Quad q1 = new Quad();
Quad q2 = new Quad();

q1->translate(vector3( .1, .3, 0), 30); // Move the quad to the right and up for 30 frames.
q2->translate(vector3(-.1, -.3, 0), 30); // Move the quad down and to the left for 30 frames.

Renderer renderer;
renderer.addQuads({q1, q2});
It's more complex than this, but you get the simple idea.

実装の観点から、各フレームで、命令に従って各オブジェクトのベース頂点を変換し、アルファ値に関する情報を含む VBO にそれらすべてをロードし、シェーダー プログラムに渡してすべてのクワッドを一度に描画します。

これは明らかに私がレンダリング エンジンと呼ぶものではありませんが、3D ジオメトリの代わりに 2D クワッドをレンダリングするためだけに同様のタスクを実行します。その場しのぎのレンダリング エンジンを開発するための正しい軌道に乗っているかどうかについては、ただ興味があります。ほとんどの場合、確立されたレンダリング エンジンを使用してそれらを理解することは素晴らしいことだと思います。それがどのように機能するかを学びます。

4

1 に答える 1