Hi,
ich versuche nun seit einigen Tagen mich durch Managed Directx9 (C#)durchzuschlagen. Im Internet gibt es so einige gute Tutorials. Leider beschäftigen sich diese meist immer nur mit einem Teilaspekt.
So habe ich es geschafft mit DX9 ein einfarbiges Dreieck oder auch eine Texture in einem Quadrat darzustellen.
Versuche ich dies nun zu kombinieren schlägt es immer fehl.
Nun zu meiner Frage:
Ich möchte ein einfarbiges Dreieck über einem texturierten Quadrat darstellen. Wie ist die Funktionsweise von:
Ich habe die Variablen
Einfarbiges Dreieck
VertexBuffer vertices;
mit
VertexFormat = CustomVertex.PositionColored.Format
und
Texturiertes Quadrat
VertexBuffer texturedVertices;
mit
VertexFormat = CustomVertex.PositionTextured.Format
panelTexture <- geladene Textur
Einzelnd kann ich beides problemlos darstellen.
Ich habe nun versucht beide mit folgendem Code in der Render() Funktion darzustellen:
...
device.SetTexture(0, null);
device.VertexFormat = CustomVertex.PositionColored.Format;
device.SetStreamSource(0, vertices, 0);
device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1);
device.SetTexture(0, panelTexture);
device.VertexFormat = Microsoft.DirectX.Direct3D.CustomVertex.PositionTextured.Format;
device.SetStreamSource(0, texturedVertices, 0);
device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
...
Ohne Erfolg.
Vielen Dank für die Hilfe.
Viele Grüße
Grumbler
Hi,
ich kann die zwar bei deinem Problem absolut nicht helfen, aber da ich mich nun auch mal an DirectX trauen möchte, könntest du mir mal ein paar gute tutorials zu dem themengebiet sagen!
danke
tutorials:
eins wär hier.
[Artikel] Managed Direct3D Tutorial
oder hier(leider nicht ganz kostenlos)
http://www.dotnet-magazin.de/
Teil 1 liegt Online +kostenlos vor:
http://www.dotnet-magazin.de/itr/online_artikel/psecom,id,636,nodeid,31.html
Ich habe mein Problem mitlerweile gelöst.
Durch die Rotation meiner Vertices habe ich festgestellt, dass die Textur nur auf einer Seite dargestellt wird. Dies ist ja gerade der Performancetrick bei OpenGL/DirectX. Ist der Winkel der Flächennormale einer Textur größer 90° bzgl. Betrachterwinkel, so wird sie nicht gerendert.
In meinem Fall schauten die Flächennormalen des Dreiecks und der Textur in 180° versetze Richtung. Dies führte dazu, dass beim Drehen immer nur eine der beiden sichtbar war.
Durch die richtige Ausrichtung beider Objekte oder durch device.RenderState.CullMode = Cull.None; kann dies behoben werden.
Ich habe diese Tuts benutzt:
http://users.pandora.be/riemer/index.html
http://pluralsight.com/wiki/default.aspx/Craig.DirectX/HomePage.html
Viele Grüße
Grumbler