2012-01-02 99 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