0

OpenGLゲームを作りたいのですが、学校で学んだこと-> glBegin/glEndで直接オブジェクトを描画する->は古風で悪いことに気づきました。インターネットでの読み取りでは、頂点バッファオブジェクトとGLSLが3Dプログラミングの「適切な」方法であることがわかります。

1) OpenGLのglDrawArraysまたはglDrawElementsを使用する必要がありますか?

2)多くのエンティティ/グラウンド/オブジェクトがあるゲームの場合、レンダリング関数は多くのglDrawArrays()である必要があります。

foreach(entity in entities):
    glDrawArrays(entitiy->arrayFromMesh()) //Where we get an array of the mesh vertex points

または、すべてのエンティティをカプセル化する1つのglDrawArrays()のみ:

glDrawArrays(map->arrayFromAllMeshes())

3)すべてのグラフィックレイヤー(DirectXなど)が頂点バッファーオブジェクトを標準化していますか?

4

1 に答える 1

3

1)OpenGLのglDrawArraysまたはglDrawElementsを使用する必要がありますか?

これは、ソースデータがどのように見えるかによって異なります。glDrawArrays頂点のストリームを描画する必要があるため、少し複雑ではありませんglDrawElementsが、複数の三角形で共有される多くの頂点がある状況で役立ちます。スプライトを描画するだけの場合glDrawArraysは、おそらく最も単純ですが、glDrawElementsバッファスペースを節約したい巨大で複雑なメッシュに役立ちます。

2)多くのエンティティ/グラウンド/オブジェクトがあるゲームの場合、レンダリング関数は多くのglDrawArrays()であるか、すべてのエンティティをカプセル化する1つのglDrawArrays()である必要があります。

繰り返しますが、これは多少オプションですが、drawarrays呼び出しの途中でプログラムの状態を変更することはできないことに注意してください。つまり、異なる状態(異なるテクスチャ、異なるシェーダー、異なるブレンド設定)を必要とする2つのオブジェクトには、個別の描画呼び出しが必要です。ただし、パフォーマンスにとって、類似したものをできるだけ多く1つの描画呼び出しにグループ化すると役立つ場合があります。

3)すべてのグラフィックレイヤー(DirectXなど)が頂点バッファーオブジェクトを標準化していますか?

DirectXにも同様の概念があります。

于 2012-08-10T20:07:18.167 に答える