Triangleorientierung

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Problemchen

Betreff: Triangleorientierung

BeitragMo, Dez 11, 2006 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,
ich habe folgendes Problem und seh wahrscheinlich den Wald vor lauter Bäumen nicht:

In einem prozedural erstelltem Mesh zeigen einige der Flächennormalen in die falsche Richtung so das ich Löcher im Mesh habe. Dadurch, das die Polygone über eine Kantenliste repräsentiert sind, stehe ich beim zeichnen auf dem Schlauch, wie rum ich nun das Polygon definieren muss.
Gibt es wohl eine einfache Möglichkeit rauszubekommen wie die Drehrichtung des zu zeichnenden Polygons aussehen muss?

Für 2D habe ich folgendes gefunden: http://rw7.de/ralf/inffaq/polygon.html#sort

Zitat:
...... Ausführlich geschrieben:
A = 0.5 ( bx*cy + cx*ay + ax*by - cx*by - ax*cy - bx*ay)
Die Formel hat ein Extra. Das Vorzeichen des Flächeninhalt entspricht dem Drehsinn der drei Punkte. Also positiv für linksrum, negativ für rechtsrum.....


Sowas suche ich für 3D, sodas man einfach auf einen Wert checkt wie etwa
Code: [AUSKLAPPEN]

If check#=0 Then
   AddTriangle(objekt_surface,v0,v1,v2)
Else
   AddTriangle(objekt_surface,v2,v1,v0)
Endif


Ich hoffe, jemand hat eine Idee....

Danke & mfg Problemchen
 

Dreamora

BeitragMo, Dez 11, 2006 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
So einfach geht das in 3D leider nicht.

Da es in 3D wie du ja schon gemerkt hast, 2 Richtungen gibt, musst du beim erstellen selbst überlegen, welche der beiden möglichen Ausrichtungen du als "aussen" ansiehst.
Es gibt keine universelle Lösung dafür, das hängt sehr von der Form des Objektes aus, was aussen ist.

Wenn du einen Mittelpunkt im Objekt hast, ist es insofern einfach, dass du das Skalarprodukt der Normale und der Richtung 0 -> Dreieck bildest und das Vorzeichen betrachtest.
< 0: Normale schaut nach innen
> 0: Normale schaut nach aussen

Das erklärt für viele auch, warum automatische Triangulierungsanwendungen (BSP Map Editoren als wohl meist genutztes hier) keine konkave Geometrie erlauben. Das heisst, dass dein Objekt dann so aufgebaut sein muss, das es keine Löcher oder Wölbungen nach innen haben darf. Dann sollte das bei gescheiter Wahl des Nullpunktes klappen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Problemchen

BeitragMo, Dez 11, 2006 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, aber schade eigentlich... Die Idee mit dem Vergleich der Trisnormale mit dem Vektor Mittelpunkt =>Tris kam mir auch nach viel Nachdenken, funktioniert aber leider nicht wie du schon sagtest bei zB einem Torus, deshalb hab ich es erstmal verworfen da mir allgemeingültige Lösungen am liebsten sind Smile.

Bis denne und danke noch mal
mfg Problemchen
 

Dreamora

BeitragMo, Dez 11, 2006 21:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei einem Torus ist es easy, denn ein Torus ist ein Rotationskörper.

Dort musst du nur das Zentrum gescheiter wählen für den Richtungsvektor: Beim Torus ist es im Zentrum des kleinen Kreises, der den Schlauch erzeugt, net in der Rotationsachse.

Wenn du eine klare Geometrie hast, lässt sich das eigentlich immer ohne Probleme erzeugen.

Aber bei nicht-speziellen Körpern gibt es dann halt nur die 2 Möglichkeiten:

1. konkav
2. Du kannst die Oberfläche parametrisieren. In diesem Falle ist N = d/du * f(t) x d/dv *f(t)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group