Die Art und Weise, die Kanten und Flächen einer primitiven Form wie eine Box, einen Kegel und alle von Ihnen genannten zu erzeugen, besteht darin, sie gleichzeitig mit der Erstellung der Scheitelpunkte zu erzeugen. Tatsächlich sollten Sie die Scheitelpunkte auf eine logische Weise erstellen, die es einfach macht, die Kanten und Flächen entsprechend zu berechnen.
Es gibt Algorithmen, die eine Menge von Punkten im Raum als Eingabe verwenden und eine sogenannte " Punktmengen-Triangulation " darüber berechnen , aber das Problem der Punktmengen-Triangulation ist NP-vollständig , so dass es schneller ist, Kanten und Flächen zu erstellen während Sie gehen, als nur die Eckpunkte zu berechnen und einen Algorithmus die Arbeit machen zu lassen. Ich möchte Sie nur wissen lassen, dass es diese Lösung gibt.
Abgesehen von dieser ineffizienten Lösung können Sie die Grundelemente meiner Meinung nach nur pro Fall behandeln, wie in den folgenden Beispielen.
Ein Netz besteht aus Eckpunkten und Flächen . Die Kanten sind in der Beschreibung der Flächen enthalten, es sei denn, Ihr Netz enthält Linien, aus denen keine Flächen bestehen. Die Eckpunkte sind Tupel mit 3 Gleitkommakoordinaten. Die Kanten sind einfach Paare von Verweisen auf die Eckpunkte, aber andererseits werden Sie sie sicherlich nicht brauchen. Angenommen, Ihre Scheitelpunkte befinden sich in einem indizierten Array. Nun, Ihre Kanten könnten dann Paare von Indizes dieses Arrays sein. Die Flächen sind Tripletts von Verweisen auf Scheitelpunkte oder Tripletts von Indizes im Fall eines indizierten Arrays .
Sie sollten in der Lage sein, die Scheitelpunkte, Kanten und Flächen zu zählen, aus denen jede dieser primitiven Formen besteht. Wenn Sie sie zählen können, müssen Sie die Eigenschaften des Objekts verstehen und die Methode entwickeln, mit der Sie sie mithilfe von Schleifen und erstellen andere Tools, wie wir sehen werden.
Kegel
Für einen Kegel mit n + 2 Eckpunkten, 3n Kanten und 2n Flächen:
- Machen Sie zwei separate Eckpunkte.
- Machen Sie einen Kreis um einen der Scheitelpunkte (den Basisscheitelpunkt), dh innerhalb einer Ebene senkrecht zum Segment zwischen den ersten beiden Scheitelpunkten. Hoffentlich können Sie mit Trigonometrie einen Kreis bilden, oder? Das sind schon alle Eckpunkte des Kegels. Das ist auch ein Drittel aller Kanten (es gibt n Kanten im Kreis und insgesamt 3n ).
- Machen Sie n Kanten vom Basisscheitelpunkt zu den n Scheitelpunkten im Kreis. Sie können dabei eine Hälfte der Gesichter (das sind n Gesichter) erstellen.
- Machen Sie n Kanten vom Spitzenscheitelpunkt zu den n Scheitelpunkten im Kreis. Sie können dabei die andere Hälfte der Gesichter (das sind n Gesichter) erstellen.
1)
2)
3)
4)
Endergebnis:
Sie können auch die Kanten und Flächen erstellen, während Sie die Schleife ausführen, aus der der Kreis besteht. Gleiche Komplexität, gleiche Sache. Erstellen Sie einen Scheitelpunkt auf dem Kreis, speichern Sie ihn in Ihrem Scheitelpunktarray, fügen Sie die entsprechende Kante (Paar von Indizes) zum Array von Indexpaaren hinzu, wenn Sie Lust dazu haben, und fügen Sie schließlich die entsprechende Fläche zu Ihrem Array von Tripletts von Indizes hinzu . Fahren Sie mit dem nächsten Scheitelpunkt fort.
Der Zylinder und das Rohr: nicht zweimal die gleiche Arbeit machen und Quads
Wiederum beginnt das Rohr mit einem Scheitelpunkt und einem Kreis, die entweder die Mitte der oberen oder der unteren Scheibe des Zylinders bilden:
- Machen Sie einen Scheitelpunkt.
- Machen Sie einen Kreis um den Scheitelpunkt. Fügen Sie Kanten (wenn Sie Kanten möchten) zwischen den aufeinanderfolgenden Scheitelpunkten des Kreises und zwischen dem mittleren Scheitelpunkt und jedem Kreisscheitelpunkt hinzu. Fügen Sie Flächen zwischen jedem Triplett von Scheitelpunkten aus dem mittleren Scheitelpunkt und zwei aufeinanderfolgenden Scheitelpunkten auf dem Kreis hinzu.
- Duplizieren Sie das alles und verschieben Sie die Kopie in der Richtung senkrecht zur Basis, die Sie gerade erstellt haben, um die Länge des gewünschten Zylinders.
- Verbinden Sie die Oberseite und die Unterseite.
Um die Ober- und Unterseite zu verbinden, müssen Sie Quads zwischen Paaren von Scheitelpunktpaaren erstellen, die sich gegenüberstehen. Denken Sie also voraus und warum machen Sie sich nicht zu einer Funktion, die aus vier Eckpunkten zwei dreieckige Flächen macht?
Erledigt. Beachten Sie, dass wir diesmal die Tatsache verwenden, dass dieselbe Struktur (Kreis + Mitte) zweimal in einem Zylinder erscheint, um eine Verknüpfung zu erstellen. Wir müssen nicht alle Eckpunkte, Kanten und Flächen von Hand machen, im Gegensatz zu dem Kegel, wo es notwendig war.
Nach diesem Faulheitsprinzip ist es auch möglich, nur ein Viertel des Kreises zu erstellen und zu duplizieren und erneut einen vollständigen Kreis mit sehr einfachen Transformationen zu erstellen (gültig für jeden Kreis, also auch für den Kegel), aber das ist für einen wirklich übertrieben nicht so komplexe Form.
Sie müssen immer die geometrischen Eigenschaften der von Ihnen erstellten Objekte verwenden, um deren Erstellung zu vereinfachen . Ihre Symmetrien und Invarianten .
Machen Sie für einen Zylinder einfach nicht den Basisscheitelpunkt, sondern nur den Kreis, duplizieren Sie, übersetzen Sie die Kopie, erstellen Sie die Quads, fertig.
Die Kugel und die Kapsel: Komplexität hinzufügen, immer noch nicht zweimal dieselbe Arbeit
Um eine Kapsel zu erstellen, möchten wir eine UV-Kugel erstellen, sie in zwei Hälften teilen, die erste Hälfte verschieben und dann die beiden mit den Seiten der Kapseln verbinden.
Wieder ist es möglich, nur ein Achtel (!!) der Kugel zu erstellen, sie dann zu duplizieren und umzukehren und dann das Ergebnis zu duplizieren und umzukehren, außer entlang einer anderen Achse usw., um eine vollständige Kugel in 4 Schritten zu erhalten (erstellen Sie die Achtel) dreimal duplizieren und umkehren). Vielleicht übertrieben, aber weniger als im Fall des Kreises.
Eine einfache UV-Kugel:
Wir machen tatsächlich nur eine Hälfte davon (zum Beispiel), duplizieren diese Hälfte, drehen die Kopie um und übersetzen sie um die Länge der Kapsel:
Wir verbinden die obere und untere Hälfte:
Die wirkliche (etwas) harte Arbeit kommt von der Trigonometrie, die zur Herstellung einer Kugel beiträgt. Die Menge aller zu einer UV-Kugel gehörenden Eckpunkte kann als die Menge aller Punkte der Form beschrieben werden:
Dabei ist R der Radius der Kugel und für eine bestimmte positive gerade ganze Zahl N haben wir die Konstante
θ = × π / N ,
k und n sind ganze Zahlen, wobei k von 0 bis 2N-1 und n von -N / 2 bis + N / 2 variiert .
Um eine Halbkugel oder ein Achtel einer Kugel zu erstellen, müssen Sie die Menge der von k und n angenommenen Werte einschränken .
Wenn k reelle Zahlen und nicht nur ganzzahlige Zahlen wären, würden Sie eine ganze Kugel erhalten, nicht nur die Eckpunkte auf ihrer Oberfläche. Wir haben hier also die Oberflächengleichung des Grundelements gerastert .
Der furchterregende Torus : Nach allem, was wir gesehen haben, ist es einfach!
Wieder mehr Trigonometrie, mehr Eckpunkte, mehr Quads, mehr Symmetrien, mehr Invarianten ... mehr Geometrie! Finden Sie die Gleichung für die Oberfläche eines Torus heraus, "rasteren" Sie sie richtig, vereinfachen Sie das Problem mithilfe der (offensichtlichen) Symmetrien des Torus und durchlaufen Sie schließlich die soeben definierten Scheitelpunkte und erstellen Sie die Kanten und Flächen wie Sie gehen!
Sehen? Ganz einfach.