平滑顶点之间的颜色

时间:2012-05-16 17:16:08

标签: c# xna-4.0 minecraft

我用C#,XNA做了一个类似Minecraft的引擎。它提供了高fps和负载块,没有fps下降,但是当涉及到全局光和阴影时 - 我有问题。

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

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. 
        }
    }
}

结果是古老的风格阴影:

(具有与之前相同的良好性能屏幕截图是使用vsync打开的,没有它的fps是~350

但我正在尝试实现我的世界的阴影,生物群落颜色和光线平滑 - &gt;

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

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

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

(我需要平滑算法才能实时和开启,因为主要目标是击败我的飞船的性能(在我的飞机当前的最小/中等图形中实现了结果(约300 fps,而不是我的世界70))

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

http://pastebin.com/GB1QqtdQ

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

1 个答案:

答案 0 :(得分:0)

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