Hi,
ich habe eine eigene 3D-Engine geschrieben, um ein eigenes (einfaches) 3D-Spiel zu entwerfen. Bisher klappt alles was mit 3 dimensionalen Ansichten zu tun hat, jedoch kann ich bis jetzt nur Linien darstellen, was für ein Spiel grafisch unangemessen ist. Ich würde jetzt für ein schöneres Aussehen auch gerne Flächen mit einbauen. Das Problem ist allerdings, dass ich herausfinden muss, welches Polygon jeweils (von der Kamera aus gesehen) "vorne" liegt, damit ich weiß in welcher Reihenfolge ich diese zeichnen lasse. Ich weiß nicht, ob es hierfür eine besonders schnelle Rechenmethode gibt, da diese Rechnung vor jeder Bilddarstellung durchgeführt werden muss, sofern ich die Kamera oder die Polygone verschiebe. Einen Denkansatz hätte ich schon, der dauert für den Vergleich zwischen allen Polygonen jedoch relativ lang. (Hinweis: Polygone, die sich schneiden, werden aufgeteilt.)
Meine Überlegung, um bei 2 Polygonen zu überprüfen, welches von der Kamera aus gesehen das "Vordere" ist, also das andere überlappt:
Ich mache aus einem der Polygone (Polygon A) eine Ebene, von der ich den Normalenvektor bestimme. Aus einem der Eckpunkte (Punkt P) von Polygon B und dem Normalenvektor (N) der Ebene von Polygon A, mache ich eine Gerade (g).
g: x = P + r*N
Ich berechne nun den Schnittpunkt der Geraden mit der Ebene von Polygon A und bekomme hierbei einen Wert für den Streckfaktor r der Geraden. Ist der Streckfaktor immer positiv oder immer negativ, so bedeutet das, dass das Polygon B auf einer eindeutigen Seite von Polygon A ist. Befinden sich die Kamera auf der selben Seite von Polygon A aus gesehen, so ist Polygon B (sofern eine Überlappung der beiden Polygone stattfindet) auf jeden Fall vor Polygon A.
Ist der Streckfaktor nicht immer positiv oder immer negativ, dann nehme ich Polygon B als Ebene und überprüfe das Vorzeichen des Streckfaktors zu einem beliebigen Eckpunkt von Polygon A (da in diesem Fall dann alle Streckfaktoren das gleiche Vorzeichen besitzen müssen) und danach gucke ich auf welcher Seite des Polygon B sich die Kamera befindet.
Dieses Vorgehen ist unheimlich rechenaufwändig, da man eine große Menge an Eckpunkten von Polygonen überprüfen muss, um die eindeutige Lageposition herauszufinden. Daher würde mich interessieren, ob es einen CPU-schonenderen Weg gibt um dies zu berechnen. (Hinweise auf Verwendung von OpenGL o.ä. benötige ich hierfür nicht, da dieses Spiel bis auf das Zeichnen von Polygonen und Linien nicht von der Grafikkarte erledigt werden soll.)
Vielen Dank schon mal im Voraus an die Leute die sich bemühen mir zu helfen
Mit freundlichem Gruß
>spEEd>