PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : D3D - DrawUserPrimitives, keine Farbe


Marscel
2009-03-18, 16:44:06
Ich nutze hier SlimDX, ein inoffizieller Nachfolger von DirectX Managed, mit C# VS EE 2008. Bisher hab 3D-Sachen immer über irgendwelche Frameworks realisiert (Processing, XNA oder auch OpenGL), da war das einfacher.

Noch ziemlich am Anfang wollte ich ein Raster zeichnen, Koordinaten stimmen auch alle. Das Vertex-Struct sieht so aus - aus irgendeine Tutorial kopiert:
[StructLayout(LayoutKind.Sequential)]
public struct tc_vertex
{
public Vector4 Position;
public int Color;
public static readonly VertexFormat format = VertexFormat.Diffuse | VertexFormat.Position;
}

Beispiel für eine Beschreibung dessen:
vertices[0].Position = new Vector4(0.0f, 0.0f, 0.0f, 1.0f);
vertices[0].Color = Color.Blue.ToArgb();
... // 1 bis 2n-1

Was unterm Strich rauskommt, ist aber das hier:
http://marscel.aplh.de/3dc/raster.png

Nix blau.

Blau wirds z.B. dann, wenn ich VertexFormat.PositionRhw anstelle von
VertexFormat.Position verwende. Da es laut Doku aber heißt, dass PositionRhw bereits transformierte Koordinaten erwartet, kann ich nicht wie gewohnt mit World-, View- und Projection-Matrix arbeiten, sondern müsste zusätzlich wohl alle Matrizen manuell nochmal auf jede Koordinate anwenden.

Hat irgndwer eine Idee, wieso die Linie nur schwarz ist?

Außerdem, Device.Present() sind im OnPaint() eines Child-Fensters. Die CPU-Auslastung liegt bei 99%, nach jedem Paint-Event wird Invalidate() aufgerufen. Was machen? Ist ja nicht normal.

Coda
2009-03-18, 16:57:15
Das Invalidate() raus.

Zu der Farbe: Was für Render-States hast du überhaupt gesetzt?

Marscel
2009-03-18, 17:07:05
Ich hab mich an diesem Tutorial (http://www.riemers.net/eng/Tutorials/DirectX/Csharp/Series1/tut4.php) orientiert, CullMode.None. Über mehr weiß ich auch nicht Bescheid.

Jup, Invalidate() wars.

Coda
2009-03-18, 17:15:10
Ich gehe mal davon aus, dass du keine Shader verwendest, oder?

"device.RenderState.Lighting = false;" hast du gesetzt?

Marscel
2009-03-18, 17:28:14
Ouch, nein. Danke. Nun ist das Gitter allerdings unabhängig von der gesetzten Farbe rot-braun.

Demirug
2009-03-18, 17:54:42
Position hat im Gegensatz zu PositionRhw keine W Koordinate. Entsprechend muss es ein Vector3 und kein Vector4 sein.

Marscel
2009-03-18, 18:08:36
Position hat im Gegensatz zu PositionRhw keine W Koordinate. Entsprechend muss es ein Vector3 und kein Vector4 sein.

Danke, das wars! Ich sollte es vielleicht doch strukturierter angehen.