Laden...

Managed Directx9 - Verständnisprobleme

Erstellt von Grumbler vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.026 Views
G
Grumbler Themenstarter:in
2 Beiträge seit 2005
vor 18 Jahren
Managed Directx9 - Verständnisprobleme

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:

  • device.SetTexture
  • device.SetStreamSource
  • device.DrawPrimitives
    in diesem Fall?

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

L
113 Beiträge seit 2004
vor 18 Jahren

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

I
1.739 Beiträge seit 2005
vor 18 Jahren

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

G
Grumbler Themenstarter:in
2 Beiträge seit 2005
vor 18 Jahren

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