PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu Terrain und MaxPrimitiveCount


pajofego
2004-07-23, 13:11:00
Hallo Leute, ich wollte mal ein Gitter (Terrain) bestehend aus Rechtecken (jedes jeweils aus zwei Dreiecken) in DirectX 9 realisieren.
Mitm_d3dcaps.MaxPrimitiveCount bekomme ich den Wert 65535 Punkte als maximalen Wert heraus.

Meine Frage:

a) Ist das Hardwareseitig beschränkt, sprich könnte die ATI 9800 pro mehr?

b) Wie kann ich größere Gebiete mit 256 x 256 oder 512 x 512 Rechtecken erstellen, ohne dabei die max. Anzahl an Punkten zu überschreiten?

Danke,

Gruss pajofego

Demirug
2004-07-23, 13:23:23
MaxPrimitiveCount entspricht der Anzahl der Dreiecke. Wenn du also Vierecke hast sind das nur die hälfte.

Da der Wert in den Caps steht ist er von der Hardware bestimmt. Bei einem R3XX ist aber auch nicht grössser. Ich weiss ja nicht was du mit dem Programm vor hast aber wenn du mehr Primitives per Call übergibst läuft es auf allen Karten die ein kleinere Limit haben nicht mehr.

Der übliche Trick um grössere Objekte zu rendern besteht daran den call einfach in mehrer zu zerlegen.

pajofego
2004-07-23, 17:57:22
Original geschrieben von Demirug
MaxPrimitiveCount entspricht der Anzahl der Dreiecke. Wenn du also Vierecke hast sind das nur die hälfte.

Da der Wert in den Caps steht ist er von der Hardware bestimmt. Bei einem R3XX ist aber auch nicht grössser. Ich weiss ja nicht was du mit dem Programm vor hast aber wenn du mehr Primitives per Call übergibst läuft es auf allen Karten die ein kleinere Limit haben nicht mehr.

Der übliche Trick um grössere Objekte zu rendern besteht daran den call einfach in mehrer zu zerlegen.

mmh,

danke erst einmal für die Antwort. Ich muss ein Feld in der Größe 256 x 256 und 512 x 512 darstellen um, dann an jedem Punkt eine bestimme Höhe zu zuweisen. Deswegen bin ich mit der o.g. Limitierung erst einmal auf knappe 101 x 101 beschränkt.
Aber du erwähnst, dass ich den call in mehrere Zerlegen kann, meinst du damit, dass ich weitere Indexbuffer erstellen soll und dann mit DrawPrimitiveIndex(...) zeichnen?

Danke

gruss pajofego

Demirug
2004-07-23, 18:34:13
Ob du noch einen Indexbuffer dazu benutzt ist erst mal egal. Wobei man es tun sollte weil es besser für die Performance ist.

512*512 Tiles wären ja 524288 primitives. Diese Zahl teil man nun durch den MaxPrimitive Wert und hat die Anzahl der Calls. Das sind 9. Jetzt muss man einfach 9 mal Draw***Primitive aufrufen und dabei entsprechend den Startvertex erhöhen.

pajofego
2004-07-23, 19:01:04
Original geschrieben von Demirug
Ob du noch einen Indexbuffer dazu benutzt ist erst mal egal. Wobei man es tun sollte weil es besser für die Performance ist.

512*512 Tiles wären ja 524288 primitives. Diese Zahl teil man nun durch den MaxPrimitive Wert und hat die Anzahl der Calls. Das sind 9. Jetzt muss man einfach 9 mal Draw***Primitive aufrufen und dabei entsprechend den Startvertex erhöhen.

ahhhh! Cool, probiere das gleich mal heute Abend aus! Danke! Ich melde mich bestimmt nochmal! :)