私はJavaでlwjglを使用して、Minecraftのようなブロックベースの3Dゲームを構築しています。私は現在、関数void Update()とvoid Draw()を含むBlockクラスを持っており、ゲームループの各サイクルでUpdate()とDraw()の順序でそれらを呼び出します。関数drawには、ブロックにテクスチャを適用するように懇願するときにtexture.bind()が含まれ、6つの側面をそれぞれレンダリングする必要があるかどうかを確認するための条件が6つあります。例:
if(rendertop)
GL11.glVertex3f(position.x, position.y, position.z);
.....
現時点では、これらのブロックをたくさん描画するとfpsが遅くなり、ゲームがプレイできなくなることを除けば、かなりうまく機能します。グーグルで検索した後、3Dオブジェクトを画面に描画し、描画ごとに各頂点をグラフィックカードに送信するより良い方法があることがわかりました。私はリストを使おうとしましたが、それはもっと多くのメモリを必要とするようです。ブロックの各サイドに新しいリストを作成し、サイドを上記の例と同じようにレンダリングする必要がある場合は、それを呼び出しました。つまり、各ブロックには6つのリストがあります。これが私がリストを作った方法です:
GL11.glNewList(displayListId, GL11.GL_COMPILE);
GL11.glBegin(GL11.GL_QUADS);
...... (Calling GL11.glVertex3f to draw the side)
GL11.glEnd();
GL11.glEndList();
そして私はそれをこのように呼んだ:
if(rendertop)
GL11.glCallList(displayListId);
しかし、前に言ったように、それはゲームを非常に遅くするだけでしたが、これはおそらく私がそれを実装した方法と関係があることを私は知っています。その方法を使用する際のもう1つの問題は、表示リストを削除するために必要なブロックを破棄することです。その方法がわかりません。
ディスプレイリストやその他の方法を使用してパフォーマンスを向上させる方法を提案できる人はいますか?