0

ゲームはテクスチャクワッドを使用したトップダウンの2Dパースペクティブですが、加速グラフィックスにGLを使用する(ANSI C、Windows互換性のため、C99は使用できません)ゲームでタイルマップを描画したいと思います。タイムマップを処理するための一般的な意見は、これから作成するGL頂点バッファオブジェクトを使用しているようです。しかし、私はいくつかのタイルが垂直方向の境界を少し超えて、斜めの空中写真を偽造したいことに気づきました。これにより、ブロックの真上にあるものはすべて、タイルで部分的に覆われるようになります。ここでVBOを使用する場合は、タイルマップ全体を一度に描画する必要があります。つまり、後で描画するオブジェクトはすべて、タイルマップの真上に表示されます。

この問題への最も正直なアプローチは何でしょうか?最初にタイルマップを描画し、次にエンティティ(プレーヤー/敵)を描画し、次にエンティティをカバーするように余分な垂直スペースを描画し、最後に両方に表示される効果を描画する必要がありますか?(ショット、爆発など)。しかし、これにより、ショットが地形に覆われないという問題が発生します。順序を変更すると、地形が大規模な爆発を不自然に覆うことになります。または、すべてのビジュアルオブジェクトを並べ替えてトップダウンで描画することもできますが、この特定のケースではテクスチャで並べ替えてもあまり役に立たないため、テクスチャを頻繁に変更する必要があります。

また、エンティティがマップに色をキャストできるように、グリッド内のすべての個々の頂点の色を動的に変更できるようにしたいと思います。私が理解していることから、これを達成する方法は、頂点シェーダーを使用することです。これは正しいです?

編集:最後のこと。画面よりも大きいタイルマップのようなVBOを変換して描画した場合、GLは自動的に見えない顔をカリングしますか、それとも「カメラ」を移動するたびにVBOをリフォームする必要がありますか?

4

2 に答える 2

1

VBOは、グラフィックメモリに予約されている抽象的なメモリの一部です。必要に応じて、任意のレイアウトと配置でデータを配置できます。1つのVBOを使用して、複数の独立したメッシュを格納できます。gl {Vertex、Normal、TexCoord、Color、Attrib}ポインタ関数は、オフセットをメモリに設定するために使用されます。つまり、プロセスアドレス空間またはバインドされたVBOへのオフセットのいずれかを意味します。

さらに、インデックスバッファ内の適切な最初の要素またはインデックスを選択することにより、 glDrawArraysまたはglDrawElementsのいずれかを使用してバインドされたデータのサブセットのみを簡単に描画できます。

したがって、いいえ、VBO全体を描画する必要はありません。

于 2011-08-18T07:18:29.433 に答える
0

私は実際に自分の質問に答えました。マップを2つに分割する必要がありました。真上に空きスペースがあるブロックと、残りのブロックです。エフェクトは「レギュラー」と「トップ」「レイヤー」の2つのパスで描画されます

でも、役に立たない質問が横になっているのはかなり気分が悪いので、管理者がそれを削除する必要がある場合は、先に進んでください。

于 2011-08-18T01:27:53.510 に答える