C# 平滑顶点之间的颜色

C# 平滑顶点之间的颜色,c#,xna-4.0,minecraft,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

我用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. 
        }
    }
}
结果是旧的minecraft样式阴影:

在vsync打开的情况下,屏幕截图的性能与之前一样好,不带fps约为350

但我正在努力实现minecraft的阴影、生物群落颜色和光平滑->

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

所以问题是平滑这些顶点。颜色-s看起来像minecraft的一个

我做了一个简单的算法,但它加载cpu太硬的顶点。计算^2大小的循环,这样当你们周游世界,计算新加载的块的阴影时,pc每次都会滞后1-2秒,而在mc中并没有这样的减速

我需要平滑算法实时运行,因为主要目标是在minecraft当前的最小/中等图形中击败minecraft的性能。与minecraft的70 fps相比,结果达到了300 fps

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


顺便说一句,如果我的英语不好的话,我很抱歉,它不是我的主要语言。

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

希望您不介意我的编辑。更清晰的格式将帮助您更好地关注您的问题。谢谢,uosſſ,我希望soIf所说的“共享”是指使用8个顶点,而不是24个顶点作为立方体/在附近的立方体之间共享顶点,那么我就不能了。1我不会在着色器中计算法线-其速度慢且太难2我需要每个块的每个面都有单独的纹理坐标我使用具有不同纹理瓷砖的单个纹理文件来进行多纹理“纹理图集”,因此通过以这种方式共享顶点,我只能获得“扭曲”而不是块的瑕疵和彩色不分割纹理。*希望我对你的理解是正确的:/你的目标是什么?它可以访问GS吗?如果你这样做,你的大部分烦恼可能会消失。XNA简介?HiDef->我不需要xbox/windows phone,我只需要一个干净的xna游戏pc版,但具有良好的性能和图形。性能和图形都实现了,唯一的问题是函数平滑顶点颜色-它减慢了一切,限制了我预计算->预加载整个世界,如果它很大->gona需要很多RAMVRAM。比minecraft小,但mc没有预计算——他们的世界是无限大的。啊,XNA似乎不支持GS,因为它是在DX9之上构建的。如果您使用的是允许GS访问的SlimDX之类的东西,那么可以使用SV_PrimitiveID,它为您提供基本体编号,以便您可以从缓冲区加载面法线/tex坐标。这样就不需要复制顶点,它们的位置/颜色也可以共享。感谢您的回复和解释。我将在谷歌上搜索slimdx和hope的教程-尝试在其上移植我的引擎我几乎100%确信这将需要更多的时间和技能,需要更改代码,但需要改进基本算法和引擎的子组件…->这是值得的。