1

我用 C# XNA 制作了一个类似于我的世界的引擎。它提供了高 fps 并加载了没有 fps 的块,但是当涉及到全局灯光和阴影时 - 我有问题。

基本上 - 在块的模型创建循环中

for (i = 0; i < 16; i++) 
{ 
    for(int j = 0; j < chunk_height; j++) 
    { 
        for(int k = 0; k < 16; k++) 
        {
            // check if block (and 4 blocks around 
            // a current one (i, j, k), (i + 1, j, k), 
            // (i - 1, j, k), (i, j, k + 1), (i, j, k -1)) 
            // are covered and put shadows to block face's vertex colors. 
        }
    }
}

结果是老式的 minecraft 风格的阴影:

(在开启垂直同步的情况下,与之前的屏幕截图具有相同的良好性能,没有它的 fps 为 ~ 350

但我正在尝试实现我的世界的阴影、生物群系颜色和光线平滑 ->

我正在使用三角形列表,因为它不可能使用三角形条来处理这些东西。但是在这种情况下,任何立方体面之间的顶点颜色都不平滑。

所以问题是平滑这些顶点。颜色 -s 看起来像我的世界。

我做了一个简单的算法,但它加载 cpu 太难了(vertices.Count ^ 2 - sized loop),所以当你环游世界并计算新加载的块的阴影时,pc 每次都会滞后 1-2 秒,而在 mc 中没有这样的减速。

(我需要平滑算法是实时和运行的,因为主要目标是超越我的世界的性能(在我的世界当前的最小/中等图形中,达到了结果(~ 300 fps 与 minecraft 的 70))

Chunk 的类(主要问题),Helper 类(杂项,在项目中使用),Block 类(Block-Type Base(用于创建和注册块类型),块的模型生成器):

http://pastebin.com/GB1QqtdQ

PS对不起,如果我的英语不好,那不是我的主要语言。

4

1 回答 1

0

您似乎根本没有共享顶点。如果您要使用共享顶点构建地板,您会得到正确的结果。请记住,仅仅因为它是一个三角形列表而不是三角形条并不意味着索引缓冲区不能为两个或多个三角形引用相同的顶点。

于 2012-05-16T18:05:27.927 回答