1

シーン内のモデル (たとえば、長方形) を記述するクラスがあるとします。このクラスには、最も重要なモデル マトリックスと VAO が含まれています。レンダリング コードで描画ループを設計するときは、次のようにします (疑似コード)。

functon draw{
  list = getListOfMeshes() /* List containing mesh class items */
  iterate list { /* could be for example 1000 different models */
    set model matrix uniform
    bind VAO 
    draw elements
  }
}

これはおそらく 1 回の VAO 呼び出しに最適化できることを理解しています。

functon draw{
  bind VAO
  draw elements
  /* How to handle the uniforms that are different for each model?? */
}

シーンに多くのモデルを取得すると、このリストの繰り返しがボトルネックになります。このレンダリング ループを設計する別の方法はありますか?

4

1 に答える 1

-1

モデル インターフェイスを作成する必要があります。次に、インターフェイスに基づいてアイテムのリストを作成します。だから何か

<code>
class interface{
    virtual render() = 0;
    virtual setUniforms()=0;
};

class object : public interface{
    render();
    setUniforms();
};
</code>

このように、呼び出したいユニフォームのタイプによって、使用しているモデルごとに set uniforms 関数を呼び出すことができます。したがって、法線マップを必要とするものはそのユニフォームを使用でき、他のユニフォームを必要とするものはそれらを使用できます。実装されたすべての均一呼び出しは、setUniforms() のオブジェクト クラス実装になります。それらは一般的なインターフェイスであるため、ループとコードは、インターフェイスを満たすリストに渡す各オブジェクトに対して適切な関数を実行します。

お役に立てれば :)

于 2012-10-26T16:19:43.073 に答える