realisierung eines 3d-spiels mittels lightwave3d und java3d hristo matev cactus ws 03/04...
TRANSCRIPT
![Page 1: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/1.jpg)
Realisierung eines 3D-Spiels mittels Lightwave3D und
Java3D
Hristo Matev
Cactus
WS 03/04
Systemprogrammierung
![Page 2: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/2.jpg)
Lightwave3D Animation
• Motion Designer
• FX_Particles
• Displacement Mapping
• Lichteinstellungen
• Morphing
![Page 3: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/3.jpg)
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
![Page 4: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/4.jpg)
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))
![Page 5: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/5.jpg)
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 "
![Page 6: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/6.jpg)
Object Loader (.obj Dateiaufbau)
... // .obj Dateiaufbauv 0.492718 0.380423 -0.855566 // Vertex Indexv 0.602765 0.200857 -1.03957v 0.399957 0.567413 -0.963151v 0.363275 0.444858 -1.14095# Face listg usemtl Defaultf 3 2 1 // Face Structureg f 4 3 1g f 5 4 1...
• Warum einen neuen Objekt-Loader?
![Page 7: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/7.jpg)
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);
![Page 8: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/8.jpg)
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.
![Page 9: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/9.jpg)
Collision Detection Terrain Following
Terrain Eigenschaften
Terrain Änderungen (Positive) Änderung (Negative) Änderung
![Page 10: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/10.jpg)
Collision Detection
Eine BranchGroup für jeden Typ der Kollisionsabfrage
Folge:
Unterteilung der
Gesamtszene auf nicht
zusammengehörige
Objekten
![Page 11: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/11.jpg)
Collision Detection
Collision Avoidance Terrain Followingprivate 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();
![Page 12: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/12.jpg)
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;
![Page 13: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/13.jpg)
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;};
![Page 14: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/14.jpg)
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 - KlassenewPoint.setLocation(evt.getX(), evt.getY()); if (fullscreenIsOn == false){ // auch fuer D3D SwingUtilities.convertPointToScreen(newPoint, canvas);...
![Page 15: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/15.jpg)
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<dir-name>(Aktiviert einen neuen Level und erwartet ein Verzeichnis z.B. -Dnexus)
-C<count>(Erwartet die Anzahl von Roboter-Gegner. Dieser Parameter überschreibt den Wert in der Konfigurationsdatei. Wenn nicht vorhanden, wird die Konfigurationsdatei benutzt)
![Page 16: Realisierung eines 3D-Spiels mittels Lightwave3D und Java3D Hristo Matev Cactus WS 03/04 Systemprogrammierung](https://reader035.vdocuments.pub/reader035/viewer/2022062622/55204d6649795902118bbb43/html5/thumbnails/16.jpg)
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