gpt4 book ai didi

java - 加快 lwjgl 渲染速度?

转载 作者:行者123 更新时间:2023-12-01 13:40:25 26 4
gpt4 key购买 nike

我想使用 OpenGl(lwjgl) 进行 Minecraft block 渲染。

无论如何,我做到了,但我遇到了 FPS 问题。我希望有人能告诉我如何优化它,以便我可以更快地渲染更多 block 。我将向您展示代码,该代码显示了到目前为止我如何基于 0 和 1 值渲染简单的 map 。

代码:

block 计算:

public void calculate(){
for(int x=0;x<w;x++)
for(int y=0;y<d;y++)
for(int z=0;z<h;z++){
for(int i=0;i<6;i++){
Vector3 d =dir[i];
if(isVisible(x,y,z)==false)continue;
if(!isVisible(-(int)d.x+x,-(int)d.y+y,-(int)d.z+z) ){
pList.add(new Point4B((byte)x,(byte)y,(byte)z,(byte) i));
}
}
}

这就是我基于 3D 位数组进行计算的方式:Point4B 仅具有参数位置 x、y、z 和边 s这就是我渲染 block 的方式:

public void draw(){
for(Point4B a : pList){
glPushMatrix();
glTranslatef(a.x,a.y,a.z);
glBegin(GL_QUADS);
DrawSide((int)a.s);
glEnd();
glPopMatrix();
}

pList 是我需要渲染的所有矩形的列表这是我渲染所有 block 的代码:

for(float x=0;x<16;x++){
for(float z=0;z<16;z++){
glPushMatrix();
glTranslatef((float)x*16,0f,(float)z*16);
chunks[(int)x][(int)z].draw();
glPopMatrix();
}

这里我渲染 16x16 block ,这非常慢。

我知道我可以对 block 之间的渲染边进行优化,但我相信即使如此,我仍然无法在没有巨大 FPS 损害的情况下渲染大约 50 个 block

这里我画边:

    switch(side){
case B_UP:
glColor3f(0.1333f,0.54509f,0.1333f);
glVertex3f(-1,1,-1);
glVertex3f(1,1,-1);
glVertex3f(1,1,1);
glVertex3f(-1,1,1);
break;

对于 6 面的所有情况,依此类推

如果我遗漏了一些需要解释的内容,请注意

最佳答案

您应该使用背面剔除,并且有一些算法将 block 的侧面组合到最大的可用面。而且你不应该使用立即模式而不是现代 opengl。尝试搜索体素引擎教程,它们很有用。

关于java - 加快 lwjgl 渲染速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20848157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com