Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Jens

Treue Seele

  • »Jens« ist der Autor dieses Themas

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

1

18.08.2003, 10:13

Progressive Mesh in OcTree

...weiß nicht, ob ich hier überhaupt noch richtig bin (mit DirectX)...

Ich möchte die in Davids Buch empfohlene Variante einbauen, eine verringerte Dreiecksanzahl eines Modells im OcTree zu speichern. Dadurch erhoffe ich mir eine weniger rechenintensive Kollisionserkennung auf Dreiecksbasis.

Das MS SDK-Beispiel Progressive Mesh ist eigentlich ganz gut geeignet, um die notwendigen Laderoutinen zu verdeutlichen.
Es wird ein Mesh mit D3DXLoadMeshFromX geladen, dann mit D3DXWeldVertices die möglichen Dreiecke gesucht, die bei Verringerung ausgeschlossen werden können und mit D3DXGeneratePMesh verschiedene ProgressiveMeshs erzeugt.
Die Methode SetNumVertices setzt nun im entsprechend ausgewählten (von der Anzahl abhängig) P-Mesh die Anzahl der Vertices herunter oder hoch.

So, nun habe ich gedacht, dass ich einfach den Vertex- und Indexbuffer des gewünschten PMeshs lesen kann, um die Vertices in den OcTree einzulesen. Aber nö!, die eingebauten ASSERTs zeigen, dass die Indices nicht gültig sind.
Kann es sein, dass die Indices gar nicht mit angepasst werden?
Dass diese noch die originalen Indices des Meshs sind, die mit D3DXLoadMeshFromX eingelesen wurden?
Wie kann ich Indices anpassen?
(Die müssen doch ebenfalls abgeschnitten werden, wenn auch die Vertices dazu fehlen...)
Danke für jeden Tipp.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

18.08.2003, 10:58

Guck Dir mal diese beiden Parameter von D3DXWeldVertices an:

pFaceRemap
[out] Pointer to a destination buffer containing the new index for each face.

ppVertexRemap
[out] Address of a pointer to an ID3DXBuffer interface, containing the new index for each vertex.

Jens

Treue Seele

  • »Jens« ist der Autor dieses Themas

Beiträge: 117

Wohnort: Dresden

  • Private Nachricht senden

3

18.08.2003, 16:30

habe ich mir angeguckt ;-)

OK, sorry, dass ich hier nicht selber gleich nachgesehen habe...

Aber ich habe nicht ein einziges Beispiel im gesamten (verdammten, sorry }> ) Web gefunden, in dem die beiden Parameter aufgefüllt weiterverarbeitet werden.
Sind das dann die neu erstellten Buffer für das FullMesh?
Im SDK-Beispiel werden noch zusätzliche PMeshs mit GeneratePMesh erstellt, die immer weniger Vertices enthalten. Die müssen doch auch andere Indexbuffer erstellen. Da ist aber nix zu finden. Im MSDN steht überhaupt kein Remark zu diesen Parametern.

Ich wollte auch mehrere PMeshs benutzen und die dann in Abhängigkeit der Kameraentfernung einfach nur noch umschalten (SetNumVertices nur in nah entfernten PMeshs verwenden).

Aber mit dem Auffüllen des OcTrees für die Kollisionserkennung fing schon das erste Problem an (siehe oben).
Naja...

Auf jeden Fall erst mal Danke für den Tipp, muss mal a bissle herumbasteln :roll:

Werbeanzeige