首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >体素游戏:渲染块的不同方式和性能

体素游戏:渲染块的不同方式和性能
EN

Stack Overflow用户
提问于 2015-02-03 05:07:18
回答 1查看 906关注 0票数 0

我正在使用OpenGL制作一个类似于“我的世界”的游戏,我想知道,在不损失性能的情况下制作灵活的渲染的最佳解决方案是什么。我的意思是有不同类型的积木和不同的绘制方式:通常的积木只是带有纹理的简单立方体,楼梯更复杂,像水和熔岩这样的液体积木需要纹理更新。我有一个带有显示列表的块。每个块都有自己的类型(字节值)。根据这个值,我可以找到“完整”的块表示(这对于所有相同类型的块都是通用的,并且包含名称、绘制方法和附加信息)。现在我需要删除渲染不可见的面(如果块在左边有一个邻居,我们不需要绘制它的左面)。但这意味着我需要向绘图方法传递6个参数(或者一个数组,或者一个掩码)。这是一种好的绘画方式,还是我选择了一个愚蠢的解决方案?对于以自己的方式绘制不同类型的块,你能推荐什么?

代码语言:javascript
运行
复制
for(int x = 0; x < 16; x++){
        for(int y = 0; y < 128; y++){
            for(int z = 0; z < 16; z++){    
                GL11.glPushMatrix();
                    GL11.glTranslatef(x, y, z);
                    BlockTypes.getBlockType(blocks[x][y][z].type).draw();                   
                GL11.glPopMatrix();
            }
        }
    }       
EN

回答 1

Stack Overflow用户

发布于 2015-02-03 06:58:34

我建议对每个块和着色器使用VBO,而不是显示列表和固定管道(实际上已弃用)。

使用VBO有多种优势。它允许您使用着色器,提供比固定管道更多的灵活性。使用着色器,可以将纹理数据、颜色数据等与顶点/索引数据分开发送。此外,VBO通常更快。

VBO提供更多灵活性的一种方式是使用水和熔岩,这需要纹理更新可以从缓冲中单独调用,从而减少重新缓冲整个块的需要。

至于看不见的人脸检测,我相信这是唯一的方法。不需要传递6个参数,只需将块传递给方法即可。您还可以创建一个方法来检索要检查的块周围的块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28286765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档