Java LWJGL/OpenGL滞后图形立方体数组
我刚刚开始学习LWJGL(Java OpenGL),我的程序遇到了巨大的滞后 基本上,我正在尝试制作一个2.5D的Minecraft克隆,所以我为世界代码所做的是创建一个多维数组的“Block”类,我制作了它的150 x 50。以下是迄今为止我的世界级课程的代码: 这是我的渲染循环: 一些额外的信息,“Block”类的所有绘制方法都是绘制立方体的所有边,除了背面 所以,现在的情况是,它正在渲染一堵巨大的立方体墙(我想要的),除了FPS非常糟糕 我不太确定我做错了什么。请记住,我需要一个立方体阵列,因为它将像Minecraft一样,我必须能够轻松地组织块,并且能够根据用户的操作销毁/放置块 谢谢 编辑:块类的绘制方法:Java LWJGL/OpenGL滞后图形立方体数组,java,opengl,lwjgl,Java,Opengl,Lwjgl,我刚刚开始学习LWJGL(Java OpenGL),我的程序遇到了巨大的滞后 基本上,我正在尝试制作一个2.5D的Minecraft克隆,所以我为世界代码所做的是创建一个多维数组的“Block”类,我制作了它的150 x 50。以下是迄今为止我的世界级课程的代码: 这是我的渲染循环: 一些额外的信息,“Block”类的所有绘制方法都是绘制立方体的所有边,除了背面 所以,现在的情况是,它正在渲染一堵巨大的立方体墙(我想要的),除了FPS非常糟糕 我不太确定我做错了什么。请记住,我需要一个立方体
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: