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

Till

Alter Hase

  • »Till« ist der Autor dieses Themas

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

1

25.10.2003, 13:28

Dreiecke aus Punkten

Also, das klingt auf den ersten Blick etwas komisch...
und ich weiß nicht, ob dieses Problem schon bekannt ist und ob es dazu irgendwelche Verfahren gibt:

Ich habe eine bestimmte Anzahl Vertices (FVF egal bzw. kann sich noch ändern), die alle zusammen die Oberfläche eines 3D-Objekts bilden sollen. Nun brauche ich irgendein Verfahren, wie ich aus diesen Vertices die Dreiecke erhalte, die die gesamte Oberfläche des Objekts abdecken. Jeden Vertex mit jedem anderen verbinden wäre ja schwachsinn ( nicht nur wegen der Performance, auch würden konkave Objekte nicht mehr möglich sein, da weiter vor stehende Vertices sich wieder mit weiter vor stehenden Vertices verbinden, obwohl sie eigentlich in "mittleren Schichten" weiter in Richtung Objekt gehen sollten). Also im Prinzip: JEDER VERTEX MUSS TEIL DER OBERFLÄCHE SEIN UND DARF NICHT IM INNEREN LIEGEN.

Kennt irgend jemand ein Verfahren, wie man so etwas bewerkstelligen könnten?

Danke im Voraus

2

25.10.2003, 18:34

Nehmen wir mal eine Kugel. Du hast mehrere Punkt die zusammen, wenn man sie in einer Punktliste ausgibt, eine Kugel darstellen, richtig? Wenn man die Punkte der Kugel in der richtign Reihenfolge errechnet ist das kein Problem, eine einfache Triangulation und fertig.

Da wir aber nicht davon ausgegehen können das die Punkt in einer bestimmten Reihenfolge errechnet wurden, wirds schwierig.

Jedes Dreieck soll ein Teil der euseren Schicht sein. Was bedeutet wenn man den Normalenvektor des jeweiliegen Dreieck's berechnet er in einen Raum schaut wo es keine weiteren Vertice gibt. Vieleicht so. Man spannt eine BoundingBox um alle Punkte. So hat man die Ausdehnung des Objektes. Nun erzeugst du einfach ein beliebiges Dreieck und erzeugst eine Art ViewFrustum für das Dreieck. Die Near Ebene ist die Ebene auf der das Dreieck selber liegt, dann bilden die 3 Kanten des Dreieckes jeweils eine Ebene, die Far - Ebene liegt dann auf der Höhe des Rahmens der BoundingBox.
Und nun testet man ob sich in diesem Raum weitere Punkte befinden. Wenn nein, dann ist es ein gültiges Dreieck das ganz ausen liegt, wenn ja ist es ungültig.
Aber aufgepasst. Jedes Dreieck hat ja zwei Seiten. Also muss man den Test für beiden Seiten Seperat durchführen.

Die drei Ebenen für die Kanten des Dreiecks kann man mittels dem Normalenvektor erzeugen.

Diese Aktion must du dann für sämtliche Kombinationen von Dreiecken durchgehen.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

26.10.2003, 01:03

Ich könnte mir folgenden Ansatz vorstellen: Man übergibt nicht nur die Punkte, sondern auch noch ein einzelnes komplettes Dreieck der Oberfläche (also die Nummern der Punkte, die das Dreieck bilden). Dann könnte man rekursiv über die gesamte Oberfläche wandern und weitere Dreiecke bilden.

4

26.10.2003, 02:31

Aber wie will man dann entscheiden ob dieses Dreieck nicht z.B. quer durch das Modell läuft? Man muss ja dann davon ausgehen das die Punkte nicht Sortiert sind. Der erste Punkt könnte auf der Vorderseite liegen und der nächste auf der Rückseite des Modells.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

26.10.2003, 07:37

Ja, das ist mir auch aufgefallen, aber man könnte vielleicht auf eine andere Weise den "nächsten" Punkt finden... und zwischendurch immer irgendwelche Tests machen, damit sich das Modell nicht selbst schneidet.

6

26.10.2003, 15:15

Eben deshalb kam ich auf die Idee mit den Ebenen. Vieleicht gibt es ja noch eine andere Möglichkeit zu testen ob ein Dreieck wircklich auf der außenseite liegt oder nicht.

[edit]Vieleicht sind die Ebenen zu viel des guten. Mir fällt gerade noch was ein. Mann spannt wieder eine BoundingBox um die Punkte und fertig dan eine Liste allermöglichen Kombinationen von Dreicken an und speichert dazu immer die Entfernung zwischen der BoundingBox und dem jeweiligen Dreieck. Dann wählt man die Dreiecke aus die am nächsten an der BoundingBox dran sind und die anderen verwirft man.[/edit]
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Till

Alter Hase

  • »Till« ist der Autor dieses Themas

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

7

26.10.2003, 16:09

Die Idee mit den Ebenen und Normalvektoren finde ich gar nicht mal so schlecht. Da ich die Berechnungen ja nur EIN Mal brauche, spielen Laufzeitverluste keine Rolle ( Ich werde wahrscheinlich sowieso nicht dran vorbei kommen, sämtliche Dreieckskombinationen durchzugehen ).
Ich fange dann gleich mal an...

8

26.10.2003, 16:29

Wie kommst du eigentlich auf diese Frage? Stammt die aus einer Notwendigkeit heraus?
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige