3

現在、継承を使用してレンダリングを行うための汎用インターフェイスを提供するゲーム エンジンがあります。

class renderable
{
public:
    void render();
};

各クラスはgl_*関数自体を呼び出します。これにより、コードの最適化が難しくなり、レンダリングの品質の設定などの実装が難しくなります。

class sphere : public renderable
{
public:
    void render()
    {
        glDrawElements(...);
    }
};

Rendererオブジェクトをレンダリングするクラスを作成するシステムを実装することを考えていました。

class sphere
{
    void render( renderer* r )
    {
        r->renderme( *this );
    }
};

class renderer
{
    renderme( sphere& sphere )
    {
         // magically get render resources here
         // magically render a sphere here
    }
};

私の主な問題は、この方法を使用するときに VBO をどこに保存し、どこに作成する必要があるかということです。このアプローチを使用するか、現在のアプローチに固執する必要がありますか?

4

1 に答える 1

3

(免責事項: 私は GameEngine でも C++ パフォーマンスの専門家でもないので、これは割り引いて考えてください)

GamePlay3Dなど、ビジター アプローチを使用する既存のゲーム エンジンがいくつかあります。パフォーマンス上の理由から、非表示オブジェクトをレンダリング ルーチンから除外する必要があります。

于 2013-10-21T13:56:21.147 に答える