2

私はこれまで基本的にすべてのプログラミングに XNA を使用してきましたが、C++ を使用して (IO 用の SFML と共に、ウィンドウの作成などとともに) OpenGL に移行したいと考えています。手始めに、タイルベースのゲームを作成したいと思います。私は主にLazyFoo のチュートリアルを見てきました。

2 つの質問があります。

タイルはどのように描画すればよいですか? 即時描画、配列、VBO などを使用する必要がありますか? VBO はやり過ぎのように感じますが、よくわかりません。即時描画を使用するのは非常に魅力的ですが、明らかに非推奨です。これは 2D であり、一連のクワッドのみを対象としているため、この目的には問題ないかもしれません。

たくさんの異なるタイルが欲しいので、すべてのタイルを 1 つのテクスチャに収めることはできません。bindTexture の使用はそれほど安価ではないことを読んだので、できる限り多くの呼び出しを避ける必要があります。テクスチャのマネージャーを作成し、それらをすべて 1 つの大きなテクスチャにまとめてバインドできるのではないかと考えましたが、そのサイズが問題になります。

4

2 に答える 2

2

即時モードを使用しないでください。これは扱いが面倒で、最近の OpenGL バージョンからは削除されています。理想的には VBO を介して Vertex Arrays を使用します。最終的には、はるかに使いやすくなりました。信じてください。

そのテクスチャの切り替えについて。非常に複雑なシーンでのテクスチャ スイッチ パターンの最適化について話しているのです。あなたの場合、それはほとんど問題になりません。

アップデート

今、あなたは物を使うことさえせずに心配しています。これは時期尚早の最適化よりも悪いことです。最初に OpenGL をよく理解してから、状態スイッチの管理について心配することをお勧めします。

于 2012-12-27T17:22:19.507 に答える
0

テクスチャアトラスに関して; これは通常、テクスチャを 2 のべき乗サイズのテクスチャのグループにステッチすることによって行われます。たとえば、タイルベースのゲームでは、特定のタイル セット (氷の世界のタイルなど) を 2 つまたは 3 つのテクスチャでグループ化することがあります。それらをレンダリングしたいときは、どのタイルが表示されているかを判断してから、各テクスチャを 1 回バインドし、画面に表示されているタイルに対してそのテクスチャからタイルをレンダリングします。

これを正しく行うには、かなりのセットアップ時間が必要です。アトラスの各サブテクスチャに関する情報を保持する必要があるため、タイルが参照されるたびに適切なテクスチャを見つけて、そのテクスチャの適切な領域をレンダリングできます。また、適切なテクスチャがバインドされたときに実行されるように、レンダリング操作をグループ化する適切な方法も必要です。

datenwolf が言ったように、私は早い段階で複雑なテクスチャ システムにあまり集中しません。テクスチャの熱心なバインドは、さらに先に進むまで十分に高速です。

于 2012-12-27T18:05:58.617 に答える