-1

私はマインクラフトのようなゲームに取り組んでいます。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: レンダリング選択中にブレンドを無効にすると修正されました。

スクリーンショット

4

1 に答える 1