LWJGL / OpenGL Lag Drawing Cube Array - PullRequest
       23

LWJGL / OpenGL Lag Drawing Cube Array

1 голос
/ 29 марта 2012

Я только начал изучать LWJGL (Java OpenGL), и я сталкиваюсь с огромным лагом в моей программе.

По сути, я пытаюсь сделать клон 2.5D Minecraft, поэтомуто, что я сделал для кода мира, - это создание многомерного массива класса «Блок», который я сделал «150 на 50».Вот код для моего мирового класса:

enter image description here

А вот мой цикл рендеринга:

enter image description here

Некоторая дополнительная информациявсе методы рисования для класса «Блок» - это рисование всех сторон куба, кроме задней.

Итак, происходит то, что он рендерит большую стену кубов (хотел), за исключением того, что FPS ОЧЕНЬ плохо.

Я не совсем уверен, что я делаю не так.И помните, что мне нужен массив кубов, потому что, поскольку он будет похож на Minecraft, мне нужно будет иметь возможность легко организовывать блоки и иметь возможность уничтожать / размещать блоки в зависимости от того, что делает пользователь.

Спасибо!

Редактировать: метод Draw для класса блока:

    Texture stone = Util.createTexture("Tiles/Stone.png");

    stone.bind();
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

    glBegin(GL_QUADS);
        //FRONT FACE
        glTexCoord3f(0,1,z);
        glVertex3f(x,y,z);

        glTexCoord3f(1,1,z);
        glVertex3f(x + width,y,z);

        glTexCoord3f(1,0,z);
        glVertex3f(x + width,y + height,z);

        glTexCoord3f(0,0,z);
        glVertex3f(x,y + height, z);

        //RIGHT FACE
        glTexCoord3f(0,1,z);
        glVertex3f(x + width,y,z);

        glTexCoord3f(1,1,z - length);
        glVertex3f(x + width,y,z - length);

        glTexCoord3f(1,0,z - length);
        glVertex3f(x + width,y + height,z - length);

        glTexCoord3f(0,0,z);
        glVertex3f(x + width,y + height,z);
        //LEFT FACE
        glTexCoord3f(0,1,z);
        glVertex3f(x,y,z);

        glTexCoord3f(1,1,z - length);
        glVertex3f(x,y,z - length);

        glTexCoord3f(1,0,z - length);
        glVertex3f(x,y + height,z - length);

        glTexCoord3f(0,0,z);
        glVertex3f(x,y + height,z);

        //TOP FACE
        glTexCoord3f(0,1,z - length);
        glVertex3f(x,y + height,z - length);

        glTexCoord3f(1,1,z - length);
        glVertex3f(x + width,y + height,z - length);

        glTexCoord3f(1,0,z);
        glVertex3f(x + width,y + height,z);

        glTexCoord3f(0,0,z);
        glVertex3f(x,y + height,z);

        //BOTTOM FACE
        glTexCoord3f(0,1,z - length);
        glVertex3f(x,y,z - length);

        glTexCoord3f(1,1,z - length);
        glVertex3f(x + width,y,z - length);

        glTexCoord3f(1,0,z);
        glVertex3f(x + width,y,z);

        glTexCoord3f(0,0,z);
        glVertex3f(x,y,z);
    glEnd();

1 Ответ

5 голосов
/ 29 марта 2012

Вы не должны создавать текстуру каждый раз, когда вызывается block.draw (). Назовите его один раз, прежде чем делать какую-либо визуализацию.

Texture stone = Util.createTexture("Tiles/Stone.png");

Это также улучшило бы вашу производительность, используя массивы вершин вместо непосредственного рисования в режиме.

...