2012-01-02 98 views
4

http://www.youtube.com/watch?v=gZNdfVwkttM - 如果看不到图片,您可以看到本视频中描述的所有问题。WPF 3D透明纹理 - 剪辑?

下面所有图片中的所有墙都具有半透明的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只是没有画出这部分场景,我们可以看到窗口背景!

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

+0

另外的图象: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 2012-01-02 12:30:24

+0

我发现这个http://stackoverflow.com/questions/9430 67/wpf-3d-textures-with-alpha-channel/6331933#6331933 Z顺序是这个WPF行为的原因吗?以及如何逃避这个? – user808128 2012-01-02 12:45:36

+0

您好,在获取403访问被拒绝(禁止)的所有图像。另外如果我是你,我会编辑你的答案,以便在管理员投票之前取消发誓 – 2012-01-02 12:54:58

回答

3

您需要根据距离视点的距离对三角形进行排序。只有这样,wpf才能够混合透明纹理。 DirectX是能够在彼此但顶部共混三角形绘图仅当THEMA后到前

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

+0

谢谢,你说得对。 – user808128 2012-01-04 19:47:52

+0

只需添加它就足以按从远到近的顺序排列透明模型。至少据我了解。 – user808128 2012-01-04 19:56:19

+0

不,当一个透明三角形在不透明三角形前面可见时。 – 2012-01-04 20:16:28