Hallo,
Ich möchte eine Spiegelung ähnlich wie hier http://code-inside.de/blog/2008/03/02/howto-wpf-spiegelung-mit-dem-visualbrush/ in 3D umsetzen.
Dazu verwende ich ein GeometryModel3D Objekt welches die Form eines Quadrats hat. Als Material habe ich ein DiffuseMaterial mit VisualBrush angewendet. Das ganze funktioniert wunderbar. Das einzige was an einem perfekten Spiegeleffekt noch fehlt ist die Transparenz. Im oben genannten Beispiel wird auf einem 2D-Control einfach eine OpacityMask angewendet. Wie setzte ich das auf einer 3D-Fläche um? Ich habe bereits etwas einer MaterialGroup herumbespielt und einen unteren Halbtransparenten Layer hinzugefügt. Allerdings möchte ich dass sich die OpacityMask auf meine VisualBrush auswirkt.
Weis jemand wie ich so etwas realisieren könnte?
Hallo Lector,
Weiß nicht obs dir hilft aber, ich habe das so gemacht:
Material LoadMaterial(ImageSource ImageSrc)
{
Image img = new Image();
img.Source = ImageSrc;
Color startColor = Color.FromArgb(0, 255, 255, 255);
Color endColor = Color.FromArgb(127, 255, 255, 255);
GradientStopCollection stops = new GradientStopCollection();
stops.Add(new GradientStop(startColor, 0.5));
stops.Add(new GradientStop(endColor, 1.0));
img.OpacityMask = new LinearGradientBrush(stops, 90.0);
Brush brush = new VisualBrush(img);
return new DiffuseMaterial(brush);
}
//....
mfg, XaN
Dank für den Tipp. Ich habe das ganze ähnlich umgesetzt:
private Material createMirrorMaterial(Visual visual)
{
VisualBrush visualBrush = new VisualBrush(visual);
visualBrush.RelativeTransform = m_scale; //Damit die Y-Achse gespiegelt ist
Rectangle rect = new Rectangle();
rect.Width = 200;
rect.Height = 200;
rect.Fill = visualBrush;
rect.OpacityMask = m_opacityMask; //Damit wir einen Farbverlauf ins transparente haben
VisualBrush mirrorBrush = new VisualBrush(rect);
DiffuseMaterial material = new DiffuseMaterial(mirrorBrush);
return material;
}
m_scale und m_opacityMask erstelle ich am Anfang und rufe Freeze() auf um etwas Performance zu gewinnen. Ich habe jedoch festgestellt dass der Spiegeleffekt ziemlich langsam ist wenn ich ein Objekt bewege.
Es wäre toll wenn jemand Tipps hat wie ich das Ganze schneller machen könnte.