Java LWJGL/OpenGL滞后图形立方体数组

Java LWJGL/OpenGL滞后图形立方体数组,java,opengl,lwjgl,Java,Opengl,Lwjgl,我刚刚开始学习LWJGL(Java OpenGL),我的程序遇到了巨大的滞后 基本上,我正在尝试制作一个2.5D的Minecraft克隆,所以我为世界代码所做的是创建一个多维数组的“Block”类,我制作了它的150 x 50。以下是迄今为止我的世界级课程的代码: 这是我的渲染循环: 一些额外的信息,“Block”类的所有绘制方法都是绘制立方体的所有边,除了背面 所以,现在的情况是,它正在渲染一堵巨大的立方体墙(我想要的),除了FPS非常糟糕 我不太确定我做错了什么。请记住,我需要一个立方体

我刚刚开始学习LWJGL(Java OpenGL),我的程序遇到了巨大的滞后

基本上,我正在尝试制作一个2.5D的Minecraft克隆,所以我为世界代码所做的是创建一个多维数组的“Block”类,我制作了它的150 x 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();

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

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

使用顶点数组而不是立即模式绘制也会提高性能。

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

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

使用顶点数组而不是立即模式绘图也会提高性能。

您不能将该代码复制并粘贴到帖子中吗?您必须使用它的屏幕截图?您是否在block.draw()中执行即时模式渲染(glBegin)?请发布block.draw()代码。没有实现背面渲染D:您不能将该代码复制并粘贴到您的帖子中吗?您必须使用它的屏幕截图?您是否在block.draw()中执行即时模式渲染(glBegin)?请发布block.draw()代码。未实现背面渲染D: