WPF 3D透明纹理 - 剪辑?

时间:2012-01-02 12:27:38

标签: wpf textures transparent clipping

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

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

所有墙都包含两个三角形。哪里没有明确的法线,因为我定义了三角形索引,因此WPF会自动计算法线。

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

背面也没有任何背面材料或额外的三角形。

正如你所看到的,如果你只看+ Z到-Z(站在蓝色方块上,看着红色方块 - 这是第二张图片),没有问题。

但如果你向后看(从红色到蓝色 - 第一张图片),就没有透明度了!

嗯,我决定从黄色方块看(第三张图片)。

然后我走近了 - 你可以看到发生了什么(图片从4到6)。

没有几何构造错误或纹理映射错误或灯光错误!我估计这是某种裁剪!另外还有一些感兴趣的图片7和8来证明我的猜测。

最后一张照片显示托管Viewport3D的窗口的白色背景(之前是黑色的),我猜测剪辑已经确认 - WPF只是没有画出这部分场景,我们可以看到窗口背景!

BUT!如果从各种外观发生这种情况,为什么从+ Z到-Z(第二张图片)的外观看起来不错?!

1 个答案:

答案 0 :(得分:3)

您需要根据距离视点的距离对三角形进行排序。只有这样,wpf才能融合透明纹理。 DirectX能够将三角形混合在一起,但只有在将thema绘制回前面时

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