我刚刚开始学习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();
答案 0 :(得分:5)
每次调用block.draw()时都不应创建纹理。在进行任何渲染之前,请调用一次。
Texture stone = Util.createTexture("Tiles/Stone.png");
它还可以提高您使用顶点数组而不是立即模式绘制的性能。