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

时间:2012-03-29 17:11:36

标签: java opengl lwjgl

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

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

enter image description here

这是我的渲染循环:

enter image description here

一些额外的信息,“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();

1 个答案:

答案 0 :(得分:5)

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

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

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

相关问题