WPF 3D透明纹理-剪辑?

4

http://www.youtube.com/watch?v=gZNdfVwkttM - 如果您无法看到图片,可以在此视频中查看所有问题的描述。

以下所有图像中的墙壁都有一个半透明的PNG纹理。每个正方形的墙壁、地板和天花板瓷砖都是单独的GeometryModel3D(我知道这对性能不利,但是...)。中央立方体的地板和天花板没有任何几何形状和纹理 - 因此它们具有与Window.Background(黑色)相同的颜色。但是考虑的效果在任何透明度获得的方式中都会出现:具有透明度的ImageBrush纹理,材料颜色(例如DiffuseMAterial.Color),其中颜色具有alpha通道,将ImageBrush用作材料,其中ImageBrush具有不透明度- 我使用的所有方式都存在相同的问题。

所有的墙壁都由两个三角形组成。因为我定义了三角形索引,所以没有显式法线,法线通过WPF自动计算。

http://imagepost.ru/images/i/ma/image00001.png

它也没有任何背面材料或额外的三角形从背面。如您所见,如果仅从+Z到-Z查看(站在蓝色正方形上并望向红色正方形-即第二张图片),则没有问题。但是,如果您向后看(从红色到蓝色-第一张图片),则没有透明度!好吧,我决定从黄色正方形(第三张图片)开始观察。然后我走近了-您可以看到发生了什么(第4到6张图片)。没有几何构造错误、纹理映射错误或照明错误!这是某种剪辑,我猜测!此外还有一些有趣的图片7和8来证明我的猜测。最后一张图片显示了承载Viewport3D的窗口的白色背景(之前是黑色),并且我的剪辑猜测得到了确认-WPF只是没有绘制场景的这部分,我们可以看到窗口背景!但是!如果这种情况从各种角度发生,为什么从+Z到-Z的视角(第二张图片)看起来很好?!

附加图片: http://imagepost.ru/images/i/ma/image00003.png http://imagepost.ru/images/i/ma/image00004.png http://imagepost.ru/images/i/ma/image00005.png http://imagepost.ru/images/i/ma/image00006.png http://imagepost.ru/images/i/ma/image00007.png http://imagepost.ru/images/i/ma/image00008.png http://imagepost.ru/images/i/ma/image00009.png - user808128
我发现了这个链接:https://dev59.com/VUfSa4cB1Zd3GeqPAdfZ#6331933。Z顺序可能是这种WPF行为的原因吗?如何避免这种情况? - user808128
你好,我在所有图片上都遇到了403访问被拒绝(禁止)的问题。另外,如果我是你,我会在管理员给你投反对票之前编辑你的回答以删除脏话。 - Dr. Andrew Burnett-Thompson
只需在浏览器地址栏中按Enter键重新加载它们 - 我也遇到了相同的403错误,重新加载后它们就会出现。 - user808128
第二张图片:http://imagepost.ru/images/i/ma/image00002.png - user808128
1个回答

4
你需要根据视点距离对三角形进行排序。只有这样,WPF 才能混合透明纹理。DirectX 能够将三角形叠加在彼此之上,但只有在按照从后往前的顺序绘制它们时才能实现。

http://www.ericsink.com/wpf3d/2_Transparency.html


只能补充一点,就是足以将透明模型按照远离视点的顺序排序。至少我是这样理解的。 - user808128
不,当一个透明的三角形在一个不透明的三角形前面可见时,不是这样。 - Emond
那么,如何仅对Model3DGroup.Children集合中的整个模型进行排序,而不是对场景中的每个三角形进行排序呢?第二种方法太困难且性能不佳。 - user808128
当一个透明的三角形在不透明的三角形前面可见时,您是想说在这种情况下我不需要对三角形(或模型)进行排序吗?但是像这种情况怎么办http://www.imagepost.ru/?v=0001_20.png,我需要对它们进行排序,因为您可以在图片上看到透明边缘。此图片中的每个生物都是一个矩形(由许多三角形组成),具有带有透明背景的纹理。但是,如果我按照远离我的相机方向的顺序对它们进行排序,这些伪影就会消失。 - user808128
"但是这种情况怎么办,图片链接为imagepost.ru/?v=0001_20.png。这张图片上的墙壁不透明且位于透明物体的后面。" - user808128
当可能存在一个更近的透明三角形被先绘制时,您需要对三角形进行排序。否则,这种情况将永远无法正确绘制。只有在确定模型中的三角形永不重叠时,您才不必对其进行排序。当实心三角形在背景中时,您需要先绘制这些三角形,然后再绘制已排序的透明三角形。 - Emond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接