Ich arbeite an einer Anwendung, die SharpDX und das SharpDX Toolkit verwendet, um einfache 3D-Formen zu zeichnen, und das Geometrics.Desktop-Beispiel war sehr hilfreich beim Einstieg. Jetzt versuche ich, einige Formen transparent zu machen, und um die Dinge einfach zu halten, versuche ich nur, das Teekannenmodell in diesem Muster transparent erscheinen zu lassen (vielleicht wäre das durchscheinender genauer).Wie kann ich ein transparentes 3D-Objekt mit dem SharpDX Toolkit zeichnen?
Für diejenigen, die mit dem Geometrics.Desktop-Beispiel nicht vertraut sind, zeichnet es einige einfache primitive geometrische Formen in 3D. Da es sich um eine Beispiel-App handelt, ist es ziemlich einfach, so dass es ein ziemlich gutes Scratchpad zum Experimentieren mit den 3D-Funktionen der SharpDX "Toolkit" -Bibliothek ist.
Ich habe dies dem Loadcontent-Methode hinzugefügt (die beim Start einmal ausgeführt wird), in dem Bemühen, Direct3D vorzubereiten Mischen zu tun:
var blendStateDescription = new BlendStateDescription();
blendStateDescription.AlphaToCoverageEnable = false;
blendStateDescription.RenderTarget[0].IsBlendEnabled = true;
blendStateDescription.RenderTarget[0].SourceBlend = BlendOption.SourceAlpha;
blendStateDescription.RenderTarget[0].DestinationBlend = BlendOption.InverseSourceAlpha;
blendStateDescription.RenderTarget[0].BlendOperation = BlendOperation.Add;
blendStateDescription.RenderTarget[0].SourceAlphaBlend = BlendOption.Zero;
blendStateDescription.RenderTarget[0].DestinationAlphaBlend = BlendOption.Zero;
blendStateDescription.RenderTarget[0].AlphaBlendOperation = BlendOperation.Add;
blendStateDescription.RenderTarget[0].RenderTargetWriteMask = ColorWriteMaskFlags.All;
var blendState = SharpDX.Toolkit.Graphics.BlendState.New(this.GraphicsDevice, blendStateDescription);
this.GraphicsDevice.SetBlendState(blendState);
Ich habe die Tiefe Schablone wie folgt festgelegt:
Und in der Draw-Methode (die mit der Bildrate laufen und iteriert durch eine kleine Reihe von 3D-Modellen, die jeweils zeichnen), habe ich den folgenden Code hinzugefügt. Sie verschiebt die Teekanne in die Mitte des Ansichtsfensters und macht sie groß genug, um einige der anderen Objekte zu verdecken. Die Teekanne ist zuletzt gezogen, so haben die anderen Modelle bereits gemacht worden, so dass ich habe gehofft, dass das wirklich eine durchscheinende Teekanne auf sie ziehen würde:
// Draw the primitive using BasicEffect
if (i == 6)
{
basicEffect.Alpha = 0.5f;
basicEffect.World *= Matrix.Translation(-x, -y, 0);
basicEffect.World *= Matrix.Scaling(3);
}
else
{
basicEffect.Alpha = 1;
}
primitive.Draw(basicEffect);
(Der Kommentar und die letzte Aufforderung waren Teil Zeichnen von der ursprüngliche Beispielcode)
Aber leider ist das Ergebnis eine große undurchsichtige Teekanne unter den anderen Objekten.
Was muß ich tun, um diese te zu machen Apot transparent?
Fehle ich etwas oder habe ich den Mischstatus falsch konfiguriert?
Und nur der Vollständigkeit halber habe ich auch versucht, meine Objekte mit Bildern zu texturieren, die den Alpha-Kanal bei 50% haben, aber das führt immer noch zu opaken Objekten.
Vielen Dank im Voraus für jede Hilfe!
Verwenden Sie direct3d11? Weil es kein * primitiv * nur * Kontext * gibt. –
Ja ich benutze D3D11, aber ich benutzte das Wort "primitive" im geometrischen Sinne - Würfel, Kugel, Zylinder, und so weiter. Das SharpDX-Toolkit verfügt über Klassen, die das Zeichnen solcher Formen erleichtern und mit denen Sie problemlos arbeiten können. Meist. Es war sehr schwierig, sie transparent zu machen. – NSFW