Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung."—  Präsentation transkript:

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

2 Lightwave3D Animation Motion Designer FX_Particles Displacement Mapping Lichteinstellungen Morphing

3 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

4 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))

5 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 "

6 Object Loader (.obj Dateiaufbau)... //.obj Dateiaufbau v 0.492718 0.380423 -0.855566// Vertex Index 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 3 2 1// Face Structure g f 4 3 1 g f 5 4 1... Warum einen neuen Objekt-Loader?

7 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);

8 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.

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

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

11 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();

12 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;

13 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; };

14 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);...

15 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)

16 Literatur 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 LightWave http://j3d.org // Allgemein zu Java3D http://java.sun.com/docs/books/tutorial/extra/fullscreen/ // Der Fullscreen Exclusive Mode


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

Ähnliche Präsentationen


Google-Anzeigen