2012-05-16 158 views
1

我在C#,XNA中制作了一个minecraft-kinda引擎。它提供了很高的fps,并加载大块w/o 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风格的影子:

(像以前那样截图与sync上取得同样好的服务表现,没有它的fps是〜350

但我试图实现minec筏的阴影,生物群落颜色和光平滑 - >

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

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

我做了一个简单的算法,但它加载CPU太硬(vertices.Count^2 - sized loop)所以当你旅行的世界和新加载的块的阴影计算,PC滞后1-2秒,每一次,而在MC有没有这样的速度变慢。

(我需要平滑算法中以实时和onrun因为主要的目标是打败我的世界的表现(在我的世界目前的最低/中图形的结果是实现(〜300个FPS与我的世界的70))

组块的类(主要的问题),辅助类(其它的东西,在项目中使用),Block类(块型基(用于创建和注册块类型),块的模式发生器):

http://pastebin.com/GB1QqtdQ

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

+0

希望你不介意我的编辑。更清晰的格式将帮助您更好地关注您的问题。 –

+0

谢谢你,我希望如此 – user1399159

回答

0

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

+0

如果通过“分享”你的意思 - 使用8个顶点而不是24个立方体/共享顶点之间的立方体附近,然后我不能。 1)我不会在着色器中计算法线 - 它的速度慢且太困难2)我需要纹理坐标来为每个块的每个人脸单独设置(我使用具有不同纹理贴图的单个纹理文件用于多纹理贴图('贴图集') )所以通过以这种方式共享顶点,我只能得到伪像和“扭曲”而不是块纹理的彩色失真。 *希望我了解你的权利:/ – user1399159

+0

你的目标是什么配置文件?它有权访问GS吗?如果你这样做,你的大部分困难可能会消失。 – Ani

+0

XNA Profile? HiDef - >我不需要Xbox/Windows手机,我只需要一个干净的PC版本的XNA游戏,但具有良好的性能和图形。性能和图形的实现,唯一的问题就是该函数(SmoothVertices的颜色) - 它减慢了一切,并限制了我预先计算 - >预加载整个世界(如果它的大 - > gona需要很多RAM(VRAM )。少于Minecraft,但mc没有预先计算 - 他们的世界是无限的大小)。 – user1399159