Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XNA中的网格排序_C#_Xna_Xna 4.0_Mesh_Alphablending - Fatal编程技术网

C# XNA中的网格排序

C# XNA中的网格排序,c#,xna,xna-4.0,mesh,alphablending,C#,Xna,Xna 4.0,Mesh,Alphablending,我对XNA中的树有问题。当我有树时,我需要使用alpha混合使非叶子部分透明,但模型的某些部分没有正确显示,因此alpha混合失败。我想知道是否有可能读取网格位置来对它们进行排序,或者是否有任何其他方法来拥有透明的非叶部分。 在模型中排序可能不起作用,因为我想从各个角度查看此树。在3D环境中进行Alpha混合可能是一个棘手的问题。肖恩·哈格里夫斯(Shawn Hargreaves)几年前写了一篇文章,涉及到大多数主要问题(标题为画家算法的章节专门针对您的问题)。长话短说:不存在完美完成你想要的事

我对XNA中的树有问题。当我有树时,我需要使用alpha混合使非叶子部分透明,但模型的某些部分没有正确显示,因此alpha混合失败。我想知道是否有可能读取网格位置来对它们进行排序,或者是否有任何其他方法来拥有透明的非叶部分。
在模型中排序可能不起作用,因为我想从各个角度查看此树。

在3D环境中进行Alpha混合可能是一个棘手的问题。肖恩·哈格里夫斯(Shawn Hargreaves)几年前写了一篇文章,涉及到大多数主要问题(标题为画家算法的章节专门针对您的问题)。长话短说:不存在完美完成你想要的事情的技术,所以问题变成了:你愿意做出什么样的权衡

进行阿尔法测试而不是阿尔法混合可能是最简单的解决方案。这是一个二进制测试,其中不透明像素要么出现要么不出现,因此这些像素的绘制顺序在很大程度上是不相关的。这将给你坚硬的边缘,但如果你的纹理有足够的分辨率,它仍然可以看起来很好;我知道魔兽世界使用这种技术,我很确定我记得在暗黑破坏神III中看到过


您可以使用内置的AlphaTestEffect来执行此操作,也可以自己在像素着色器中实现此操作。

您要查找的是所谓的顺序独立透明度,可以使用名为“”的方法来实现。如果您不使用XNA的Reach配置文件,并且可以编写自定义着色器,则可以实现此技术以实现正确的混合,而无需担心网格级别信息,也无需为当前帧/视图重新排序


又是一个DX9(但很容易适应XNA)实现。

不-有一种技术可以满足他的要求。我没有说没有任何技术可以满足他的要求。例如,对每个三角形进行单独排序是一种非常简单的技术,可以满足他的需要。我说过没有完美的技术,深度剥离也是如此。它需要您使用HiDef配置文件,需要您编写复杂的着色器,需要额外的几何体过程,这些过程可能是可接受的,也可能是不可接受的。。。只有Thun能回答什么技术适合他的需要这个问题。我提出了许多方法中的一种。这种排序是在片段级别进行的,因此,如果经过足够多的过程,它实际上会产生像素级的完美结果。对于性能和质量,也可以很容易地对此进行微调。虽然你说得对,它很复杂,需要多次通过。我使用了Alpha测试,但在边缘有失败的边缘。我的意思是在边缘alpha失败,像素没有合适的值。但我想这比写着色器要好。我正在学习XNA,我只在HLSL中写了一些基本效果(如基本闪电),所以深度剥离现在对我来说可能很难。感谢您的帮助您应该能够通过修改其参数来调整
AlphaTestEffect
的工作方式。特别是,
ReferenceAlpha
属性用于确定失败/通过阈值。将它设置为1应该会给您一个清晰的边缘,但它看起来仍然不太正确。考虑到没有任何部分透明度,您需要修改叶纹理。