私はマインクラフトのようなゲームに取り組んでいます。16x16x16 のチャンクごとに表示リストを作成します。それは正常に動作します。しかし、ブロック選択を追加しようとすると、それが見えなくなります。ランダムな位置にいる場合にのみ表示されます(0、0、0で選択をレンダリングします)。何が悪いのかわかりません。
私のレンダリングループ:
while (isRunning) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
timer.nextFrame();
input(timer.getDelta());
tex.bind();
glLoadIdentity();
renderChunks();
renderText();
renderSelection();
Display.update();
errorCheck();
if (Display.isCloseRequested()) {
isRunning = false;
}
}
レンダーチャンク:
glRotated(player.getRy(), 1, 0, 0);
glRotated(player.getRx(), 0, 1, 0);
glTranslatef(-player.getX(), -player.getY(), -player.getZ());
//---------
for (int x = minWorldChunkX; x < maxWorldChunkX; ++x) {
for (int y = minWorldChunkY; y < maxWorldChunkY; ++y) {
for (int z = minWorldChunkZ; z < maxWorldChunkZ; ++z) {
glPushMatrix();
glTranslatef(x << 4, y << 4, z << 4);
glCallList(chunkDisplayLists.get(new ChunkPosition(x, y, z)));
glPopMatrix();
}
}
}
レンダー選択:
glPushMatrix();
glCallList(selectionDisplayList);
glPopMatrix();
選択表示リスト:
selectionDisplayList = glGenLists(1);
glNewList(selectionDisplayList, GL_COMPILE);
glBegin(GL_LINES);
glColor3f(0, 0, 0);
glLineWidth(3);
glVertex3f(1, 1, 1);
glVertex3f(1, 0, 1);
glVertex3f(1, 0, 1);
glVertex3f(1, 0, 0);
glVertex3f(1, 0, 0);
glVertex3f(1, 1, 0);
glVertex3f(1, 1, 0);
glVertex3f(1, 1, 1);
glVertex3f(0, 1, 0);
glVertex3f(0, 0, 0);
glVertex3f(0, 0, 0);
glVertex3f(0, 0, 1);
glVertex3f(0, 0, 1);
glVertex3f(0, 1, 1);
glVertex3f(0, 1, 1);
glVertex3f(0, 1, 0);
glVertex3f(0, 1, 0);
glVertex3f(1, 1, 0);
glVertex3f(0, 0, 0);
glVertex3f(1, 0, 0);
glVertex3f(0, 0, 1);
glVertex3f(1, 0, 1);
glVertex3f(0, 1, 1);
glVertex3f(1, 1, 1);
glEnd();
glEndList();
ソースコードは私のgithubで入手できます
編集: チャンクをレンダリングする前に renderSelection() を render ループから renderChunks() に移動すると、機能しました。しかし、 renderSelection() を次のように変更すると:
glPushMatrix();
glDisable(GL_DEPTH_TEST);
glCallList(selectionDisplayList);
glEnable(GL_DEPTH_TEST);
glPopMatrix();
完全に消えます。
編集 2: レンダリング選択中にブレンドを無効にすると修正されました。