4 Stimmen

WPF 3D transparente Texturen - Clipping?

http://www.youtube.com/watch?v=gZNdfVwkttM - Sie können alle im Video beschriebenen Probleme sehen, wenn Sie keine Bilder sehen können.

Alle Wände in allen Abbildungen unten haben eine halbtransparente PNG-Textur. Jede quadratische Wand-, Boden- und Deckenfliese ist ein separates GeometryModel3D (Ich weiß, dass das nicht gut für die Leistung ist, aber...). Der Boden und die Decke des zentralen Würfels haben keine Geometrie und Texturen - daher haben sie eine Farbe, die der Window.Background (Schwarz) entspricht. Aber der betrachtete Effekt tritt auf, egal auf welche Weise mehr Transparenz erzielt wird: eine Textur für ImageBrush mit Transparenz, Material.Color (zum Beispiel DiffuseMaterial.Color) mit Alphakanal, ImageBrush als Material, bei dem ImageBrush eine Deckkraft hat - auf jede Weise habe ich das gleiche Problem.

Alle Wände bestehen aus zwei Dreiecken. Es gibt keine expliziten Normalen, weil ich Dreiecksindizes definiere und die Normalen automatisch von WPF berechnet werden.

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

Es gibt auch kein Rückmaterial oder zusätzliche Dreiecke von der Rückseite.

Wie Sie sehen können, gibt es kein Problem, wenn Sie nur von +Z nach -Z schauen (Sie stehen auf dem blauen Quadrat und schauen zum roten Quadrat - das ist das zweite Bild).

Aber wenn Sie zurückblicken (vom Roten zum Blauen - das erste Bild), gibt es keine Transparenz!

Nun, ich habe beschlossen, vom gelben Quadrat aus zu schauen (drittes Bild).

Und als ich näher heran ging - können Sie sehen, was passiert ist (Bilder von 4 bis 6).

Es gibt keinen Fehler in der geometrischen Konstruktion oder Fehler beim Texturieren oder Beleuchtungsfehler! Es handelt sich um eine Art von Clipping, vermute ich! Außerdem gibt es einige interessante Bilder 7 und 8, um meine Vermutung zu bestätigen.

Das letzte Bild zeigt den weißen Hintergrund des Fensters, in dem Viewport3D gehostet ist (zuvor war es schwarz) und meine Vermutung über das Clipping wurde bestätigt - WPF hat diesen Teil der Szene einfach nicht gemalt und wir können den Hintergrund des Fensters sehen!

ABER! Wenn dies aus verschiedenen Blickwinkeln passiert, warum scheint der Blick von +Z nach -Z (zweites Bild) gut zu sein?!

4voto

Emond Punkte 48911

Sie müssen die Dreiecke basierend auf ihren Entfernungen vom Blickpunkt sortieren. Erst dann kann wpf die transparenten Texturen miteinander vermischen. DirectX kann Dreiecke übereinander mischen, aber nur, wenn sie von hinten nach vorne gezeichnet werden.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X