Скачать презентацию Realisierung eines 3 D-Spiels mittels Lightwave 3 D Скачать презентацию Realisierung eines 3 D-Spiels mittels Lightwave 3 D

c536e97876ba0172bb3d92551a5e6c4d.ppt

  • Количество слайдов: 16

Realisierung eines 3 D-Spiels mittels Lightwave 3 D und Java 3 D Cactus Systemprogrammierung Realisierung eines 3 D-Spiels mittels Lightwave 3 D und Java 3 D Cactus Systemprogrammierung WS 03/04 Hristo Matev

Lightwave 3 D Animation • Motion Designer • FX_Particles • Displacement Mapping • Lichteinstellungen Lightwave 3 D Animation • Motion Designer • FX_Particles • Displacement Mapping • Lichteinstellungen • Morphing

Spielprogrammierung (Überblick) n n n Terrainmodellierung (Raumauswahl) Modellierung der Roboter Andere Objekte in der Spielprogrammierung (Überblick) n n n Terrainmodellierung (Raumauswahl) Modellierung der Roboter Andere Objekte in der Szene Object Loader Collision Detection Terrain Following Texturen Navigation (Tastatur, Maus) Spiel. Logic Fullscreen Konfigurationsdatei Programmparameter

Raumauswahl (Objekten) Raumauswahl (Objekten) "terrain. obj" "robot. obj" "house. obj" "rockterrain. obj" "rockcollide. obj" "tree. obj" "spikey. obj" - Alle Polygone auf die man gehen darf (terrain following) - Der Gegner (collision avoidance) - Gebäuden (collision avoidance) - Felsen (terrain following) - Felsen (collision avoidance) - Bäume (collision avoidance) - Das Ziel (die Waffe - (collision avoidance))

Raumauswahl (Texturen) textures/ - Verzeichnis Raumauswahl (Texturen) textures/ - Verzeichnis "terrain. obj" "robot. obj" "house. obj" "rockterrain. obj" "rockcollide. obj" "tree. obj" "spikey. obj" - "terrain. jpg " "robot. jpg " "house. jpg " "rock. jpg " "tree. jpg" "rock. jpg "

Object Loader (. obj Dateiaufbau) • Warum einen neuen Objekt-Loader? . . . //. Object Loader (. obj Dateiaufbau) • Warum einen neuen Objekt-Loader? . . . //. obj Dateiaufbau v 0. 492718 0. 380423 -0. 855566 v 0. 602765 0. 200857 -1. 03957 v 0. 399957 0. 567413 -0. 963151 v 0. 363275 0. 444858 -1. 14095 # Face list g usemtl Default f 321 g f 431 g f 541. . . // Vertex Index // Face Structure

Object Loader (Aufbau) while ((line = br. read. Line()) != null){ if (line. starts. Object Loader (Aufbau) while ((line = br. read. Line()) != null){ if (line. starts. With("v")){. . . v. add. Element(new Point 3 f(x, y, z)); } else if (line. starts. With("f")){ String. Tokenizer st = new String. Tokenizer(line. substring(1)); while (st. has. More. Tokens()) { int point = Integer. value. Of(st. next. Token()). int. Value() - 1; ta. set. Coordinate(index++, (Point 3 f) v. element. At(point)); ta. set. Color(index - 1, (index % 2 == 0) ? new Color 3 f(1 f, 1 f) : new Color 3 f(0 f, 0 f)); . . . ta. set. Capability(Triangle. Array. ALLOW_INTERSECT); ta. set. Capability(Triangle. Array. ALLOW_COUNT_READ); ta. set. Capability(Triangle. Array. ALLOW_FORMAT_READ); ta. set. Capability(Triangle. Array. ALLOW_COORDINATE_READ);

Collision Detection Collision Avoidance n n Collision Avoidance ist ein Mechanismus bei dem man Collision Detection Collision Avoidance n n Collision Avoidance ist ein Mechanismus bei dem man die zukünftige Position basierend auf der momentanen Bewegung des Benutzers ermittelt und vermeidet das der Benutzer zufällig z. B. durch die Wand geht. Java 3 D stellt aber lediglich ein Collision Detection System zur Verfügung, alles anderes muss vom Programmierer übernommen werden.

Collision Detection Terrain Following n Terrain Eigenschaften n Terrain Änderungen n n (Positive) Änderung Collision Detection Terrain Following n Terrain Eigenschaften n Terrain Änderungen n n (Positive) Änderung (Negative) Änderung

Collision Detection n Eine Branch. Group für jeden Typ der Kollisionsabfrage Folge: Unterteilung der Collision Detection n Eine Branch. Group für jeden Typ der Kollisionsabfrage Folge: Unterteilung der Gesamtszene auf nicht zusammengehörige Objekten n

Collision Detection n n Collision Avoidance Terrain Following private final Vector 3 d AHEAD Collision Detection n n Collision Avoidance Terrain Following private final Vector 3 d AHEAD = new Vector 3 d (0. 0, -1. 0); private final Vector 3 d BACKWARD = new Vector 3 d (0. 0, 1. 0); private final Vector 3 d RIGHT = new Vector 3 d (1. 0, 0. 0); private final Vector 3 d LEFT = new Vector 3 d (-1. 0, 0. 0); . . picktool. set. Shape. Ray (kamera. Point, future. Vector); pr = picktool. pick. Closest (); if (pr != null) { pi = pr. get. Intersection (0); intersection. Points [direction. Index] = pi. get. Point. Coordinates. VW();

Bewegung des Spielers mit Tasten und Maus (Key-Navigation) public KNBehavior(Transform. Group tg, Mouse. Behavior Bewegung des Spielers mit Tasten und Maus (Key-Navigation) public KNBehavior(Transform. Group tg, Mouse. Behavior mouse. Beh, Collision global. Collision){ this. tg = tg; this. mouse. Beh = mouse. Beh; this. global. Collision = global. Collision; conditions[0] = new Wakeup. On. AWTEvent(Key. Event. KEY_PRESSED); conditions[1] = new Wakeup. On. AWTEvent(Key. Event. KEY_RELEASED); w = new Wakeup. Or(conditions); }. . . case Key. Event. VK_UP : if (!global. Collision. get. AHEAD()) { tg. get. Transform(tu); tu. mul(translate. U); tg. set. Transform(tu); }; break;

Bewegung des Spielers mit Tasten und Maus (Maus-Navigation) if (usermove == true) { Mouse. Bewegung des Spielers mit Tasten und Maus (Maus-Navigation) if (usermove == true) { Mouse. Event evt = (Mouse. Event) evts[last]; new. Point. set. Location(evt. get. X(), evt. get. Y()); tg. get. Transform(transform 3 D); transform 3 Dtmp. Y. rot. Y(Math. to. Radians(center. x - new. Point. x)); transform 3 D. mul(transform 3 Dtmp. Y); tg. set. Transform(transform 3 D); center. set. Location(canvas. get. Width()/2, canvas. get. Height()/2); usermove = false; robot. mouse. Move(center. x, center. y); } else if (usermove == false) { usermove = true; };

Fullscreen (Open. GL) if (fullscreen. Mode. OGL == true){ Display. Mode mode = new Fullscreen (Open. GL) if (fullscreen. Mode. OGL == true){ Display. Mode mode = new Display. Mode (1280, 1024, 32, Display. Mode. REFRESH_RATE_UNKNOWN); boolean is. Full. Screen = device. is. Full. Screen. Supported(); set. Undecorated (is. Full. Screen); set. Resizable (!is. Full. Screen); if (is. Full. Screen){ device. set. Full. Screen. Window(this); fullscreen. Is. On = true; validate(); . . . mouse. Beh. set. Fullscreen. Game (fullscreen. Is. On); . . . // Mouse. Behavior - Klasse new. Point. set. Location(evt. get. X(), evt. get. Y()); if (fullscreen. Is. On == false){ // auch fuer D 3 D Swing. Utilities. convert. Point. To. Screen(new. Point, canvas); . . .

Programmparameter n n n n -Mpdebug (Macht den ersten Punkt, der nach vorne von Programmparameter n n n n -Mpdebug (Macht den ersten Punkt, der nach vorne von der Picking-Routine gefunden wird, sichtbar. Man setzt an dieser Stelle einfach eine kleine Sphäre) -Mfullscreen (Setzt den Fullscreen – Mode auf Java 3 D für Open. GL) -Mfullscreen. D 3 D (Setzt den Fullscreen – Mode auf Java 3 D für Direct 3 D -> mit ALT+ENTER aktivieren) -Mnocursor (macht den Mauscursor unsichtbar) -Mnomouse (Mausereignisse werden nicht berücksichtigt) -Mtextures (Aktiviert die Texturen für diesen Level) -D (Aktiviert einen neuen Level und erwartet ein Verzeichnis z. B. -Dnexus) -C (Erwartet die Anzahl von Roboter-Gegner. Dieser Parameter überschreibt den Wert in der Konfigurationsdatei. Wenn nicht vorhanden, wird die Konfigurationsdatei benutzt)

Literatur n Internet: http: //developer. nvidia. com/object/understanding_w. htm // Was ist die w-Koordinate http: Literatur n Internet: http: //developer. nvidia. com/object/understanding_w. htm // Was ist die w-Koordinate http: //www. animationartist. com/2000/Tutorials/LWTrees/lwtrees. html // Bäume mit Light. Wave http: //j 3 d. org // Allgemein zu Java 3 D http: //java. sun. com/docs/books/tutorial/extra/fullscreen/ // Der Fullscreen Exclusive Mode