3

まず第一に、ディスプレイリストはOpenGL 3.0で非推奨になり、3.1で削除されたことを知っています。しかし、OpenGL2.1が使用されているこの大学のプロジェクトではまだそれらを使用する必要があります。

ディスプレイリストで読んだすべての記事やチュートリアルでは、木など、複数回描画されるある種のオブジェクトでそれらを使用しています。1つのオブジェクトに対して1つのリストを作成することに何か問題がありますか?

たとえば、建物のオブジェクト(.obj形式)があります。この特定の建物は一度だけ描かれます。基本的なパフォーマンス分析のために、ウィンドウのタイトルバーに1秒あたりの現在のフレーム数が表示されます。

このようにそれを行う:

glmDraw(objBuilding.model, GLM_SMOOTH | GLM_TEXTURE);

私は約260FPSを取得します。GLMライブラリについては、glmDraw関数は基本的に一連のglVertex呼び出しを行います。

しかし、このようにそれを行う:

glNewList(gameDisplayLists.building, GL_COMPILE);
    glmDraw(objBuilding.model, GLM_SMOOTH | GLM_TEXTURE);
glEndList();

glCallList(gameDisplayLists.building);

私は約420FPSを取得します。もちろん、画面のリフレッシュレートはそれほど速くは更新されませんが、私が言ったように、それはパフォーマンスを測定するための単純で基本的な方法にすぎません。

それは私にははるかに良く見えます。

また、防衛塔など、何度も繰り返すオブジェクトがある場合に備えて、ディスプレイリストを使用しています。繰り返しますが、単一のオブジェクトに対してこれを行うのに何か問題がありますか、それともこれを続けることができますか?

4

1 に答える 1

1

このようなものにディスプレイリストを使用することはまったく問題ありません。頂点配列が登場する前は、ジオメトリを高速メモリに配置するためのデファクトスタンダードでした。プットディスプレイリストには、いくつかの興味深い落とし穴があります。たとえば、OpenGL-1.0には、テクスチャオブジェクトはありませんでした。代わりに、glTexImage呼び出しをディスプレイリストに配置することが、これをエミュレートする方法でした。また、この動作は依然として一般的であるため、テクスチャをバインドしてディスプレイリストでglTexImageを呼び出すと、ディスプレイリストが呼び出されるたびに、ディスプレイリストのコンパイルで行われたことを使用してテクスチャオブジェクトが効果的に再初期化されます。一方、ディスプレイリストは頂点配列では機能しません。

TL; DR:ジオメトリが静的である場合、いつでもOpenGL-3コアに移行することは期待できず、パフォーマンスが大幅に向上します(これまでのように)。次に、それらを使用してください。

于 2011-05-18T21:15:33.147 に答える