3D-Computergrafik: Modellieren Sie Ihre Welt

Erkunde deine Welt

Soweit ich weiß, können wir nicht einfach einen Teil unserer Welt direkt in einen Computer stecken (ohne den Computer zu beschädigen). Das Beste, was wir tun können, ist, ein Computermodell unserer Welt zu erstellen. Wie modellieren wir angesichts dieser Einschränkung beispielsweise so etwas wie einen Stuhl?

Objekte in unserer Welt haben Eigenschaften oder Eigenschaften wie Form, Größe, Gewicht, Position, Ausrichtung und Farbe (und die Liste geht weiter und weiter). Betrachten wir für einen Moment nur ihre Form, Position und Ausrichtung - diese Eigenschaften nennen wir räumliche Eigenschaften. Beginnen wir mit etwas, mit dem man leichter arbeiten kann als mit einem Stuhl - zum Beispiel einem Würfel.

Schauen Sie sich die Abbildung in Abbildung 1 an. Sie zeigt einen Würfel, der in einem ansonsten leeren Raum sitzt. (Okay, der Raum hat auch eine Tür, aber das ist nur da, damit der Raum mehr wie ein Raum aussieht.)

Abbildung 1: Ein Raum mit einem Würfel

Um die Form, Position und Ausrichtung eines Würfels festzulegen, müssen Sie die Position jeder seiner Ecken angeben. Dazu könnten wir eine Sprache wie diese verwenden:

Die erste Ecke befindet sich einen Fuß (oder Meter, wenn Sie es vorziehen) über dem Boden und zweieinhalb Fuß (oder Meter) von der Wand hinter mir entfernt. Die zweite Ecke ist ebenfalls einen Fuß über dem Boden und einen Fuß von der Wand zu meiner Linken.

Beachten Sie, dass beide Ecken relativ zu etwas anderem angegeben wurden (Wand und / oder Boden). In unserem Computermodell könnten wir einen Boden und eine Wand definieren und sie als Bezugspunkte verwenden, aber es stellt sich als viel einfacher heraus, einfach einen Bezugspunkt (den wir den Ursprung nennen ) auszuwählen und diesen stattdessen zu verwenden. Für unsere Herkunft verwenden wir die Ecke, die aus den beiden Wänden und dem Boden besteht. Abbildung 2 zeigt den Ort unserer Herkunft.

Abbildung 2: Der Ursprung und die Koordinatenachse

Jetzt müssen wir angeben, wo sich jede Ecke in Bezug auf den Ursprung befindet. Sie können den Pfad vom Ursprung zu einer Ecke des Würfels auf verschiedene Arten angeben. Der Einfachheit halber müssen wir uns auf einen Standard einigen. Lassen Sie uns Folgendes tun:

Stellen Sie sich vor , dass jede der Flanken der durch den Schnitt einer Wand und einer Wand oder einer Wand und dem Boden gebildet wird , ein Name gegeben ist - wir sie den Anruf werden x - Achse , die Y - Achse und die z - Achse , wie angedeutet in Abbildung 2. Und lassen Sie uns auch im Vorfeld vereinbaren, dass wir die Position einer Ecke anhand dieses Rezepts bestimmen:

  • Messen Sie zunächst, wie weit wir vom Ursprung in einer geraden Linie parallel zur x-Achse fahren müssen
  • Messen Sie dann, wie weit wir von diesem Punkt in einer geraden Linie parallel zur y-Achse fahren müssen
  • Messen Sie abschließend, wie weit wir von diesem Punkt in einer geraden Linie parallel zur z-Achse fahren müssen

Abbildung 3 zeigt den Pfad, dem wir folgen würden, um zu einer der Ecken des Würfels zu gelangen.

Abbildung 3: Finden Sie Ihren Weg

Schreiben wir als Kurzschreibweise alle diese Entfernungen wie folgt:

  • Der Abstand vom Ursprung parallel zur x-Achse
  • Der Abstand vom Ursprung parallel zur y-Achse
  • Der Abstand vom Ursprung parallel zur z-Achse

oder (noch kürzer):

(Abstand x, Abstand y, Abstand z) 

Dieses Wertetriplett wird als Eckkoordinaten bezeichnet . Wir können die Position im Raum jeder Ecke auf ähnliche Weise angeben. Wir könnten zum Beispiel feststellen, dass der Würfel in diesem Beispiel Ecken hat bei:

(3 feet, 1 foot, 2 feet)

oder

(3 feet, 1 foot, 3 feet)

oder

(4 feet, 1 foot, 2 feet)

und so weiter.

Die Maßeinheiten (z. B. Fuß oder Meter) sind für unsere Zwecke nicht wichtig. Wichtig ist, wie die Einheiten der Standardeinheit der Bildschirmfläche zugeordnet werden - dem Pixel. Ich werde etwas später mehr über dieses Mapping sprechen.

Ein bisschen nervös werden

Die Position der Würfelecken bestimmt die Position und Ausrichtung des Würfels. Da jedoch nur die Koordinaten seiner Ecken gegeben sind, können wir keinen Würfel (geschweige denn einen Stuhl) rekonstruieren. Wir müssen wirklich wissen, wo sich die Kanten befinden, da die Kanten die Form bestimmen.

Alle Kanten haben eine sehr schöne Eigenschaft - sie beginnen und enden immer an Ecken. Wenn wir also wissen, wo sich alle Kanten befinden, wissen wir mit Sicherheit, wo sich alle Ecken befinden.

Jetzt werden wir eine große vereinfachende Annahme machen. In unserem Modell der Welt werden wir gekrümmte Kanten verbieten (Sie werden später erfahren, warum); Kanten müssen immer gerade Linien sein. Um gekrümmte Kanten zu approximieren, legen wir gerade Kanten von Ende zu Ende, wie in Abbildung 4 dargestellt.

Abbildung 4: Die geradlinige Approximation einer Kurve

Kanten werden dann zu nichts anderem als einfachen Liniensegmenten. Liniensegmente werden durch die Koordinaten ihrer Start- und Endpunkte angegeben. Daher ist das Modell eines Objekts nichts anderes als eine Sammlung von Liniensegmenten, die seine Form beschreiben.

Visualisierung: Es dient nicht mehr nur der Entspannung

Nachdem wir nun wissen, wie man ein Objekt modelliert, sind wir bereit, das Problem der Darstellung eines Modells auf dem Computerbildschirm anzugehen.

Stellen Sie sich den Computerbildschirm als Fenster in unsere virtuelle Welt vor. Wir sitzen auf einer Seite des Fensters und die virtuelle Welt sitzt auf der anderen. Abbildung 5 veranschaulicht dieses Konzept.

Abbildung 5: Unser Fenster in die virtuelle Welt

Es gibt viele Möglichkeiten, die Informationen im Modell im Fenster (oder auf dem Computerbildschirm) abzulegen. Möglicherweise ist die einfachste eine sogenannte isometrische Projektion .

Da unser Modell drei Dimensionen hat und der Computerbildschirm nur zwei hat, können wir das Modell dem Bildschirm zuordnen, indem wir zuerst die z-Koordinate (die dritte der drei Koordinaten) von jedem Punkt im Modell entfernen. Dies lässt uns die x- und y-Koordinaten für jeden Punkt. Die x- und y-Koordinaten werden entsprechend skaliert (basierend auf den Einheiten des Modells) und den Pixeln auf dem Bildschirm zugeordnet. Wir können diese Schritte an jedem Punkt von Interesse im Modell verwenden, um herauszufinden, wo es auf dem Bildschirm erscheinen würde.

Wie sich herausstellt, ist es nicht notwendig, jeden Punkt in unserem Modell auf diese Weise zu transformieren . Eine der Konsequenzen der Annäherung jeder Kante im Modell mit Liniensegmenten besteht darin, dass wir wirklich nur die Endpunkte eines Liniensegments transformieren müssen, nicht jeden Punkt auf dem Liniensegment. Dies ist richtig, da einfache Projektionen (wie eine isometrische Projektion) Liniensegmente immer in Liniensegmente umwandeln - Liniensegmente werden nicht zu Kurven. Sobald Sie die Positionen der transformierten Endpunkte kennen, können wir daher die in AWT integrierten Linienzeichnungsroutinen verwenden, um das Liniensegment selbst zu zeichnen.

Ich denke, ein Beispiel könnte angebracht sein. Ich werde drei einfache Modelle derselben Form in unterschiedlichen Ausrichtungen erstellen.

Tabelle 1 enthält die Daten, die eine einfache Form an ihrer ersten Position beschreiben. Jede Zeile in der Tabelle entspricht einer Kante. Die Tabelle gibt die Koordinaten der Start- und Endpunkte der Kante an. Nehmen wir an, wir betrachten die Form von außen entlang der z-Achse.

Segment Start Ende
x y z x y z
EIN 25 0 -70 25 35 -35
B. 25 35 -35 25 0 0
C. 25 0 0 25 -35 -35
D. 25 -35 -35 25 0 -70
E. 25 0 -70 -25 0 -70
F. -25 0 -70 -25 35 -35
G -25 35 -35 -25 0 0
H. -25 0 0 -25 -35 -35
ich -25 -35 -35 -25 0 -70
Tabelle 1: Daten für eine einfache Form - erste Position

Das Applet in Abbildung 6 zeigt, was wir sehen würden.

Sie benötigen einen Java-fähigen Browser, um dieses Applet anzuzeigen. Abbildung 6: Eine einfache Form - erste Position

Drehen wir nun die Form um einige Grad. Tabelle 2 enthält die Daten, die dieselbe Form an ihrer zweiten Position beschreiben. Beachten Sie, dass sich nur die Position und Ausrichtung geändert hat, nicht die Form.

Segment Start Ende
x y z x y z
EIN 45 0 -58 34 35 -25
B. 34 35 -25 23 0 7
C. 23 0 7 34 -35 -25
D. 34 -35 -25 45 0 -58
E. 45 0 -58 -2 0 -74
F. -2 0 -74 -12 35 -41
G -12 35 -41 -23 0 -7
H. -23 0 -7 -12 -35 -41
ich -12 -35 -41 -2 0 -74
Tabelle 2: Daten für eine einfache Form - zweite Position

Das Applet in Abbildung 7 zeigt, was wir sehen würden.

Sie benötigen einen Java-fähigen Browser, um dieses Applet anzuzeigen. Abbildung 7: Eine einfache Form - zweite Position

Drei ist ein Zauber, also drehen wir ihn noch einmal - diesmal um ein paar Grad nach oben. Tabelle 3 enthält die Daten, die die Form an ihrer dritten Position beschreiben.

Segment Start Ende
x y z x y z
EIN 45 -26 -52 34 19 -38
B. 34 19 -38 23 3 6
C. 23 3 6 34 -42 -6
D. 34 -42 -6 45 -26 -52
E. 45 -26 -52 -2 -33 -66
F. -2 -33 -66 -12 12 -52
G -12 12 -52 -23 -3 -6
H. -23 -3 -6 -12 -49 -20
ich -12 -49 -20 -2 -33 -66
Tabelle 3: Daten für eine einfache Form - dritte Position

Das Applet in Abbildung 8 zeigt, was wir sehen würden.

Sie benötigen einen Java-fähigen Browser, um dieses Applet anzuzeigen. Abbildung 8: Eine einfache Form - dritte Position

Einpacken

Inzwischen sind Sie wahrscheinlich zu dem Schluss gekommen, dass das Ändern der Ausrichtung eines Objekts von Hand nicht viel Spaß macht. Und das Ergebnis ist auch nicht sehr interaktiv. Nächsten Monat werde ich Ihnen zeigen, wie Sie Objekte interaktiv manipulieren können (und wir werden den Computer dazu bringen, die ganze Zahl zu knacken - ist das nicht die Art von Arbeitscomputern, die gut sein sollen?). Wir werden uns auch mit dem Problem der Perspektive befassen - insbesondere werde ich Ihnen zeigen, wie Sie es in Ansichten unseres Modells integrieren können.

Todd Sundsted schreibt Programme, seit Computer in Desktop-Modellen verfügbar sind. Obwohl Todd ursprünglich daran interessiert war, verteilte Objektanwendungen in C ++ zu erstellen, wechselte er zur Programmiersprache Java, als Java die offensichtliche Wahl für solche Dinge wurde. Todd ist Co-Autor der Java Language API SuperBible, die jetzt überall in Buchhandlungen erhältlich ist. Neben dem Schreiben ist Todd Präsident von Etcee und bietet Java-zentrierte Schulungen, Mentoring und Beratung an.

Erfahren Sie mehr über dieses Thema

  • Ein wenig über alles, was mit 3D-Grafiken zu tun hat, finden Sie unter:

    //www.3dsite.com/3dsite/

  • Yahoo bietet eine bequeme Möglichkeit, die Suche nach 3D-Grafikthemen zu starten

    //www.yahoo.com/Computers_and_Internet/Graphics/3D/

  • Sie können diesen Artikel, den Quellcode und die Klassendateien als gezippte TAR-Datei herunterladen:

    /javaworld/jw-05-1997/howto/jw-05-howto.tar.gz

  • Frühere Java-Artikel
  • "Wenn statische Bilder einfach nicht den Schnitt machen" - Erfahren Sie, wie Sie Ihre Applets und Anwendungen aufpeppen

    mit animierten Bildern.

  • "Wie Java das Produzenten- / Konsumentenmodell verwendet, um Bilder zu verarbeiten - ein Insider-Look" - Erfahren Sie mehr über die leistungsstarke Bildverarbeitungstechnik von Java und befolgen Sie dann meine einfachen Verfahren zum Erstellen Ihrer eigenen Produzenten- und Konsumentenkomponenten.
  • "Erfahren Sie, wie Applets netzwerkbasierte Bilder asynchron laden" - Hier sehen Sie, wie Java-Applets Bilder in einer netzwerkbasierten Umgebung verarbeiten.
  • "Das Zeichnen von Text ist mit drei Java-Klassen einfach" - Erfahren Sie anhand dieser Erklärung, welche Klassen verwendet werden sollen und wie sie zusammenarbeiten, wie Sie visuell ansprechenden Text erstellen.
  • "Untersuchen von HotSpot, einem objektorientierten Zeichenprogramm" - Erfahren Sie durch ein Studium dieses Java, wie die Teile der Java-Sprache und der Klassenbibliothek zusammenpassen. Programm
  • "Verwenden der Grafikklasse" - Ein genauer Blick auf die Grafikklasse und die darin enthaltenen Zeichnungsprimitive sowie eine Demonstration ihrer Verwendung.
  • "Observer and Observable" - Eine Einführung in die Observer-Schnittstelle und die Observable-Klasse unter Verwendung der Model / View / Controller-Architektur als Leitfaden.
  • "Die effektive Benutzeroberfläche" - Eine Einführung in die Observer-Benutzeroberfläche und die Observable-Klasse unter Verwendung der Model / View / Controller-Architektur als Leitfaden.
  • "Java- und Ereignisbehandlung" - Wie Ereignisse an Komponenten der Benutzeroberfläche übergeben werden, wie Ereignishandler erstellt werden und vieles mehr.
  • "Einführung in die AWT" - Eine Beschreibung des Java-Toolkits für die Benutzeroberfläche.

Diese Geschichte "3D-Computergrafik: Modellieren Sie Ihre Welt" wurde ursprünglich von JavaWorld veröffentlicht.