LWJGL/OpenGL滞后绘图立方体阵列

Aar*_*ron 1 java opengl lwjgl

我刚刚开始学习LWJGL(Java OpenGL),而且我的程序遇到了大量的延迟.

基本上,我正在尝试制作2.5D Minecraft克隆,所以我为世界代码所做的就是创建一个"Block"类的多维数组,我制作了150乘50.到目前为止,这是我世界级的代码:

在此输入图像描述

这是我的渲染循环:

在此输入图像描述

一些额外的信息,"Block"类的所有绘制方法都是绘制立方体的所有边,除了背面.

所以,正在发生的事情是它渲染了一大块立方体(我想要的是什么),除了FPS非常糟糕.

我不太确定我做错了什么.请记住,我需要一个多维数据集阵列,因为它将像Minecraft一样,我将必须能够轻松地组织块,并能够根据用户的行为来销毁/放置块.

谢谢!

编辑:块类的绘制方法:

    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();
Run Code Online (Sandbox Code Playgroud)

mwd*_*mwd 5

每次调用block.draw()时都不应创建纹理.在进行任何渲染之前,请调用一次.

Texture stone = Util.createTexture("Tiles/Stone.png");
Run Code Online (Sandbox Code Playgroud)

它还可以提高您使用顶点数组而不是立即模式绘制的性能.