Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung.

Slides:



Advertisements
Ähnliche Präsentationen
Objektorientierte Programmierung
Advertisements

der Universität Oldenburg
Conditional Sentences advanced
Collision Detection in Java3D Hristo Matev WS 02/03.
Eine Seminararbeit von Gerd Mühlinghaus
Klassen - Verkettete Liste -
Systemprogrammierung > Projektgruppe: Alexander Schesler, Hristo Matev.
Java3D Einfacher scene graph View branch graph BG Shape3D Knoten S
Application Programming Interface Graphische Datenverarbeitung
Linien, Flächen & geometrische Figuren von Mario Linge
Kurt Rosenberg. C# für.NET oder.NET für C# is(C# == C++ && Java)? true : false ; reines C# Ausblick Überblick.
Kapselung , toString , equals , Java API
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik F Verteilte Software - Java.
Verteilte Software - Java - Prozedurale Programmierung 1
Binäre Bäume Richard Göbel.
FH-Hof Texturen Richard Göbel. FH-Hof Anwendungen von Texturen Darstellung von 2D-Bildern Gestaltung von Oberflächen Simulation komplexer Geometrien...
FH-Hof Geometrie Richard Göbel. FH-Hof Aufbau des virtuellen Universums.
FH-Hof Interaktion Richard Göbel. FH-Hof Interaktion mit der Klasse Behavior Behavior-Objekte sind Knoten des Szenengraphen. Behavior-Objekte werden durch.
Java: Dynamische Datentypen
Einführung in die Programmierung von 3D-Grafiken Basis ist Java3D
Licht und Schatten Richard Göbel.
FH-Hof Automatisches Erzeugen von Geometrie Richard Göbel.
FH-Hof Animation - Teil 1 Richard Göbel. FH-Hof Themen Darstellung der Geometrie ändern (Transformation, Appearance, etc.) Geometrie ändern (Morphing)
FH-Hof Interaktion Richard Göbel. FH-Hof Interaktion mit der Klasse Behavior Behavior-Objekte sind Knoten des Szenengraphen. Behavior-Objekte werden durch.
FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe.
FH-Hof Texturen Richard Göbel. FH-Hof Anwendungen von Texturen Darstellung von 2D-Bildern Gestaltung von Oberflächen Simulation komplexer Geometrien...
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 9 IO – Streams in Java Sommersemester 2003 Lars Bernard.
3.1.4 Leser/Schreiber-Ausschluß (reader/writer exclusion)
Objektorientierte Programmierung JDK-Klassenbibliothek
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Programmiermethodik SS2007 © 2007 Albert Zündorf, University of Kassel 1 GUI Konstruktion: 1. Entwurf mit Papier und Bleistift / Post Ist 2. Eventuell.
1DVG3 - Paint Teil 2 Paint Teil2. DVG3 - Paint Teil 2 2 Weitere Entwicklungen Hinzufügen verschiedener Werkzeuge: Punkte Linien Rechtecke, Rechtecke mit.
Vortrag - Kenny Schlör Applets Einführung in die Appletprogrammierung.
Modulare Programmierung
07-GraphischeObjekte Graphische Objekte in EMMA301Paint.
DVG Klassen und Objekte
08-GraphikImplementierung Implementierung der Graphik in EMMA301Paint.
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
© Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Benutzer Interaktion (interaction): die virtuelle Welt reagiert auf Benutzer Eingaben.
Einführung in die Programmierung Anweisungen und Datentypen
© 2005 Pohlig – Taulien: Eine GUI für die Klasse Mathematik Kurs: Come Together 1 April 2005 Eine GUI für die Klasse Mathematik.
Informatikunterricht mit Java
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Programmierung im Netz und Internet: Einführung in die Programmiersprache Java Teil I 1 Klassen Objekte von.
FH-Hof Konfiguration eines Universums Richard Göbel.
FH-Hof Licht Richard Göbel. FH-Hof Licht in Java3D - Basisideen Bereitstellung unterschiedlicher Lichtquellen Definition der Wirkung einer Beleuchtung.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Java Performance Tuning Performance Tuning is similar to playing a strategy game but happily you usually get paid for it.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Raimond Reichert Einführung in die Verwendung von Processing innerhalb von Eclipse.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Advanced Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Abteilung für Telekooperation Übung Softwareentwicklung 2 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Algorithmen und Datenstrukturen Übungsmodul 6
Equals, Hashcode und CompareTo Micha Kessler
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
EPROG Tutorium #3 Philipp Effenberger
Learning By Doing Ereignissteuerung (Events) prozedural ereignisgesteuert Unterprogrammaufruf an fest codierter Stelle Wann immer der Event auftritt, führe.
Learning By Doing Konstruktoren Gleicher Name wie die Klasse Zur Initialisierung des Objekts, insbesondere mit Parametern Wir immer bei der Objekterzeugung.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer);
Grundkurs Informatik 11-13
 Präsentation transkript:

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

Lightwave3D Animation Motion Designer FX_Particles Displacement Mapping Lichteinstellungen Morphing

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

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

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

Object Loader (.obj Dateiaufbau)... //.obj Dateiaufbau v // Vertex Index v v v # Face list g usemtl Default f 3 2 1// Face Structure g f g f Warum einen neuen Objekt-Loader?

Object Loader (Aufbau) while ((line = br.readLine()) != null){ if (line.startsWith("v")){... v.addElement(new Point3f(x, y, z)); } else if (line.startsWith("f")){ StringTokenizer st = new StringTokenizer(line.substring(1)); while (st.hasMoreTokens()) { int point = Integer.valueOf(st.nextToken()).intValue() - 1; ta.setCoordinate(index++, (Point3f) v.elementAt(point)); ta.setColor(index - 1,(index % 2 == 0) ? new Color3f(1f, 1f, 1f) : new Color3f(0f, 0f, 0f));... ta.setCapability(TriangleArray.ALLOW_INTERSECT); ta.setCapability(TriangleArray.ALLOW_COUNT_READ); ta.setCapability(TriangleArray.ALLOW_FORMAT_READ); ta.setCapability(TriangleArray.ALLOW_COORDINATE_READ);

Collision Detection Collision Avoidance 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. Java3D stellt aber lediglich ein Collision Detection System zur Verfügung, alles anderes muss vom Programmierer übernommen werden.

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

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

Collision Detection Collision Avoidance Terrain Following private final Vector3d AHEAD = new Vector3d (0.0, 0.0, -1.0); private final Vector3d BACKWARD = new Vector3d (0.0, 0.0, 1.0); private final Vector3d RIGHT = new Vector3d (1.0, 0.0, 0.0); private final Vector3d LEFT = new Vector3d (-1.0, 0.0, 0.0);.. picktool.setShapeRay (kameraPoint, futureVector); pr = picktool.pickClosest (); if (pr != null) { pi = pr.getIntersection (0); intersectionPoints [directionIndex] = pi.getPointCoordinatesVW();

Bewegung des Spielers mit Tasten und Maus (Key-Navigation) public KNBehavior(TransformGroup tg,MouseBehavior mouseBeh, Collision globalCollision){ this.tg = tg; this.mouseBeh = mouseBeh; this.globalCollision = globalCollision; conditions[0] = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED); conditions[1] = new WakeupOnAWTEvent(KeyEvent.KEY_RELEASED); w = new WakeupOr(conditions); }... case KeyEvent.VK_UP : if (!globalCollision.getAHEAD()) { tg.getTransform(tu); tu.mul(translateU); tg.setTransform(tu); }; break;

Bewegung des Spielers mit Tasten und Maus (Maus-Navigation) if (usermove == true) { MouseEvent evt = (MouseEvent) evts[last]; newPoint.setLocation(evt.getX(), evt.getY()); tg.getTransform(transform3D); transform3DtmpY.rotY(Math.toRadians(center.x - newPoint.x)); transform3D.mul(transform3DtmpY); tg.setTransform(transform3D); center.setLocation(canvas.getWidth()/2, canvas.getHeight()/2); usermove = false; robot.mouseMove(center.x, center.y); } else if (usermove == false) { usermove = true; };

Fullscreen (OpenGL) if (fullscreenModeOGL == true){ DisplayMode mode = new DisplayMode (1280, 1024, 32, DisplayMode.REFRESH_RATE_UNKNOWN); boolean isFullScreen = device.isFullScreenSupported(); setUndecorated (isFullScreen); setResizable (!isFullScreen); if (isFullScreen){ device.setFullScreenWindow(this); fullscreenIsOn = true; validate();... mouseBeh.setFullscreenGame (fullscreenIsOn);... // MouseBehavior - Klasse newPoint.setLocation(evt.getX(), evt.getY()); if (fullscreenIsOn == false){ // auch fuer D3D SwingUtilities.convertPointToScreen(newPoint, canvas);...

Programmparameter -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 Java3D für OpenGL) -MfullscreenD3D (Setzt den Fullscreen – Mode auf Java3D für Direct3D -> 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 Internet: // Was ist die w-Koordinate // Bäume mit LightWave // Allgemein zu Java3D // Der Fullscreen Exclusive Mode