opengl for java - mitarbeiter-servermitarbeiter.hs-heilbronn.de/~vstahl/simu/openglfolien.pdf ·...
TRANSCRIPT
![Page 1: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/1.jpg)
Prof. Dr. V. StahlOpenGL for Java
OpenGL for JavaOpenGL for Java
![Page 2: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/2.jpg)
Prof. Dr. V. StahlOpenGL for Java
Bewegte Simulationen grafisch darstellen können(effizient, realistisch, dreidimensional)
Grundfunktionen von OpenGL beherrschen
Mathematische Voraussetzungen für Computer Grafik verstehen
Ziele
![Page 3: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/3.jpg)
Prof. Dr. V. StahlOpenGL for Java
Echtzeit 3D Grafik sehr rechenintensiv
Wozu OpenGL?
Weiterer Vorteil durch Grafik Karte: Weniger Hauptspeicherzugriffe, indem grafische Objekte direkt auf der Grafikkarte gespeichert werden.
OpenGL: High level Software API für Grafik Hardware
geeignet für Spezialhardware (Grafikkarte)
Einfache, leicht parallelisierbare Algorithmen(wenig Code, wenige Kontrollstrukturen)
Viele wichtige Anwendungen
Computer Grafik
![Page 4: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/4.jpg)
Prof. Dr. V. StahlOpenGL for Java
Was ist OpenGL?
Spezifikation einer Software Schnittstelle zur Grafik Hardware (API)
System- und Programmiersprachen unabhängig
ca. 250 Befehle
… und was nicht?
GUI Programmierung, Sound, Netzwerk, usw…
![Page 5: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/5.jpg)
Prof. Dr. V. StahlOpenGL for Java
Wie funktioniert‘s?
Position, Form und Farbe von 3D Objekten (Würfel, Kugel, …)Position und Farbe von LichtquellenOberflächenbeschaffenheit (Textur) von ObjektenPosition und Blickrichtung der Kamera
Koordinatensystem Transformationen (Drehung, Verschiebung…)Projektion der 3D Szene auf ein 2D BildFarbverlauf auf Flächen (Licht/Schatten)Sichtbare/verdeckte FlächenTransformation von Texturen
Benutzerprogramm: Aufruf von OpenGL API Funktionen
OpenGL
![Page 6: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/6.jpg)
Prof. Dr. V. StahlOpenGL for Java
Geschichte von OpenGL
1982 SGI beginnt mit der Entwicklung für High End Grafik Workstations
Seit 1992 Open GL Architecture Review Board (ARB)Mitglieder: Compaq, ATI, nVidia, HP, IBM, Apple, Microsoft, …
1992 OpenGL Version 1.0
Heute: OpenGL Version 2.0
Grafikkarten Wettbewerb, Erweiterungen
![Page 7: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/7.jpg)
Prof. Dr. V. StahlOpenGL for Java
GLU (OpenGL Utilities)
Zusätzliche Bibliotheken
Einfache Funktionen zum Zeichnen komplexerer Objekte(Kugeln, Zylinder, Scheibe, …)Gekrümmte Flächen: NURBSViele nützliche Hilfsfunktionen
GLUT (OpenGL Utility Toolkit)
Torus, Tetrahedron, Octahedron, …TextPlattformunabhängige GUI Funktionen (Fenster, Maus, Tastatur)
Für GUI Funktionen verwenden wir Java!
![Page 8: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/8.jpg)
Prof. Dr. V. StahlOpenGL for Java
Zusätzliche Bibliotheken
Anwendungsprogramm
GLUGLUT
WGL/GLX/AGL
Window System
Grafik Hardware
OpenGLSystem-unabhängig
System-abhängig
![Page 9: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/9.jpg)
Prof. Dr. V. StahlOpenGL for Java
GLUGLUT
Window System
Grafik Hardware
OpenGLSystem-unabhängig
System-abhängig
Anwendungsprogramm
GL4Java
WGL/GLX/AGL
JNI
![Page 10: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/10.jpg)
Prof. Dr. V. StahlOpenGL for Java
Das erste OpenGL Programm
Canvas3D.java
Fenster erzeugen (JFrame)Zeichenfläche (Canvas3D) erzeugen und anzeigen
Abgeleitet von GLAnimCanvas (GL4Java Klasse)preInit, init: Initialisierungdisplay: Wird aufgerufen, um Bildschirm neu zu zeichnenreshape: Wird aufgerufen, wenn Fenstergröße geändert wird.
Triangle
Starter.java
![Page 11: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/11.jpg)
Prof. Dr. V. StahlOpenGL for Java
import javax.swing.*;import java.awt.*;
class Starter{
public static void main(String[] args) {
// Erzeugen des OpenGL CanvasCanvas3D canvas3D = new Canvas3D(640,480);
// Erzeugen des AnwendungsfenstersJFrame frame = new JFrame("Triangles for Java");
// OpenGL Canvas dem Frame hinzufügenContainer pane = frame.getContentPane();pane.add(canvas3D);
// Frame Grösse setzen und anzeigenframe.setSize(640,480);frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}}
Starter.java
![Page 12: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/12.jpg)
Prof. Dr. V. StahlOpenGL for Java
import gl4java.awt.GLCanvas;
class Canvas3D extends GLAnimCanvas{
// Konstruktor für Gl4Java Klasse GLCanvaspublic Canvas3D(int w, int h) { super(w, h); }
// Globale OpenGL Optionen (z.B. double buffering) setzenpublic void preInit() { … }
// Einmaliges Initialisieren (z.B. Farbe zum Löschen)public void init() { … }
// Wird aufgerufen, wenn Bildschirm neu gezeichnet werden musspublic void display() { … }
// Wird aufgerufen, wenn Fenstergröße geändert wirdpublic void reshape(int width, int height) { … }
}
Canvas3D.java
![Page 13: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/13.jpg)
Prof. Dr. V. StahlOpenGL for Java
reshape(int width, int height)
Bildschirmbereich auf den gezeichnet werden soll in PixelglViewport( 0,0,width,height );
Matrix, die 3D nach 2D Projektion machtPerspektivische Projektion60 Grad Blickwinkel, Clipping Abstand 2 bis 4glMatrixMode( GL_PROJECTION );glLoadIdentity();gluPerspective(60, 1.0, 2.0, 4.0);
// Matrix, die Zeichenkoordinatensystem positioniertglMatrixMode( GL_MODELVIEW );
TriangleView
![Page 14: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/14.jpg)
Prof. Dr. V. StahlOpenGL for Java
display
Löschen was zuvor gemalt wurdeglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Zeichenkoordinatensystem 3 Einheiten nach hinten setzenglLoadIdentity();glTranslatef(0.0f, 0.0f, -3.0f);
Farbe rot einstellenglColor3f(1.0f,0.0f,0.0f);
Dreieck durch Eckpunkte zeichnenglBegin(GL_TRIANGLES);glVertex3f(-1.0f, -1.0f, 0.0f); // links untenglVertex3f( 1.0f, -1.0f, 0.0f); // rechts untenglVertex3f( 0.0f, 1.0f, 0.0f); // mitte oben
glEnd();
![Page 15: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/15.jpg)
Prof. Dr. V. StahlOpenGL for Java
init
Interpolation wenn Eckpunkte unterschiedliche Farbe habenglShadeModel(GL_FLAT);
Hintergrundfarbe WeissglClearColor(1.0f, 1.0f, 1.0f, 0.0f);
Double Buffering (flüssiger bei bewegter Grafik)super.doubleBuffer = true;
preinit
Für Stereo Brillensuper.stereoView = false;
![Page 16: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/16.jpg)
Prof. Dr. V. StahlOpenGL for Java
Schattierungsmodell auf GL_SMOOTH setzen
Jedem Eckpunkt des Dreiecks eine andere Farbe geben
gl.glBegin(GL_TRIANGLES);
gl.glColor3f(1.0f,0.0f,0.0f); rotgl.glVertex3f(-1.0f, -1.0f, 0.0f); links unten
gl.glColor3f(0.0f,1.0f,0.0f); grüngl.glVertex3f( 1.0f, -1.0f, 0.0f); rechts unten
gl.glColor3f(0.0f,0.0f,1.0f); blaugl.glVertex3f( 0.0f, 1.0f, 0.0f); mitte oben
gl.glEnd();
TriangleInterpolation
![Page 17: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/17.jpg)
Prof. Dr. V. StahlOpenGL for Java
Dreieck um 20 Grad um z-Achse nach links drehen
gl.glRotatef( 20.0f, 0.0f, 0.0f, 1.0f );
z-Achse
TriangleRotation, TriangleRotationView
![Page 18: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/18.jpg)
Prof. Dr. V. StahlOpenGL for Java
3D nach 2D Projektions Matrix glMatrixMode(GL_PROJECTION);
Bestimmt, wie eine 3D Szene auf ein 2D Bild projiziert wird.- Orthogonalprojektion: glOrtho()- Perspektivische Projektion: gluPerspective(), glFrustum()Wird i.a. nur einmal gesetzt und nicht mehr geändert.
Matrizen in OpenGL
Model View Matrix glMatrixMode(GL_MODELVIEW);
Legt Position und Orientierung des Koordinatensystemsfest, in das als nächstes gezeichnet wird.glRotate(), glTranslate(), …
![Page 19: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/19.jpg)
Prof. Dr. V. StahlOpenGL for Java
Koordinatensystem Transformationen in OpenGL
glVertex(x,y,z)
Objektkoordinaten
Kamerakoordinaten
Bildschirmkoordinaten (Pixel)
2D Koordinaten
Multiplikation mit Projektions Matrix
Skalieren, Verschieben
Multiplikation mit Model View Matrix
glViewPort()
glRotate(),glTranslate()
gluPerspective()
![Page 20: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/20.jpg)
Prof. Dr. V. StahlOpenGL for Java
Etwas Mathematik…
Koordinatensysteme
Transformationen (Translation, Rotation, Projektion)
Homogene Koordinaten
![Page 21: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/21.jpg)
Prof. Dr. V. StahlOpenGL for Java
OpenGL Primitive
gl.glBegin(GL_TRIANGLES);
gl.glVertex(…); Punkt 1gl.glVertex(…); Punkt 2gl.glVertex(…); Punkt 3gl.glVertex(…); Punkt 4
usw.
gl.glEnd();
1
3
2
5
4
6
![Page 22: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/22.jpg)
Prof. Dr. V. StahlOpenGL for Java
OpenGL Primitive
gl.glBegin(GL_POINTS);
gl.glVertex(…); Punkt 1gl.glVertex(…); Punkt 2gl.glVertex(…); Punkt 3gl.glVertex(…); Punkt 4usw. …
gl.glEnd();
1
3
2
gl.glPointSize(float size)Größe der Punkte
![Page 23: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/23.jpg)
Prof. Dr. V. StahlOpenGL for Java
OpenGL Primitive
gl.glBegin(GL_LINES);
gl.glVertex(…); Punkt 1gl.glVertex(…); Punkt 2gl.glVertex(…); Punkt 3gl.glVertex(…); Punkt 4usw. …
gl.glEnd();
1
3
2
gl.glLineWidth(float size)Liniendicke
4
![Page 24: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/24.jpg)
Prof. Dr. V. StahlOpenGL for Java
OpenGL Primitive
gl.glBegin(GL_LINE_STRIP);
gl.glVertex(…); Punkt 1gl.glVertex(…); Punkt 2gl.glVertex(…); Punkt 3gl.glVertex(…); Punkt 4usw. …
gl.glEnd();
1
3
2
4
![Page 25: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/25.jpg)
Prof. Dr. V. StahlOpenGL for Java
OpenGL Primitive
gl.glBegin(GL_LINE_LOOP);
gl.glVertex(…); Punkt 1gl.glVertex(…); Punkt 2gl.glVertex(…); Punkt 3gl.glVertex(…); Punkt 4usw. …
gl.glEnd();
1
3
2
4
![Page 26: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/26.jpg)
Prof. Dr. V. StahlOpenGL for Java
OpenGL Primitive
gl.glBegin(GL_TRIANGLE_STRIP);
gl.glVertex(…); Punkt 1gl.glVertex(…); Punkt 2gl.glVertex(…); Punkt 3gl.glVertex(…); Punkt 4usw. …
gl.glEnd();
1
32
4 5
![Page 27: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/27.jpg)
Prof. Dr. V. StahlOpenGL for Java
OpenGL Primitive
gl.glBegin(GL_TRIANGLE_FAN);
gl.glVertex(…); Punkt 1gl.glVertex(…); Punkt 2gl.glVertex(…); Punkt 3gl.glVertex(…); Punkt 4usw. …
gl.glEnd();
1
32
4
5
![Page 28: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/28.jpg)
Prof. Dr. V. StahlOpenGL for Java
OpenGL Primitive
gl.glBegin(GL_QUADS);
gl.glVertex(…); Punkt 1gl.glVertex(…); Punkt 2gl.glVertex(…); Punkt 3gl.glVertex(…); Punkt 4usw. …
gl.glEnd();
1
32
4
5
86
7
![Page 29: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/29.jpg)
Prof. Dr. V. StahlOpenGL for Java
OpenGL Primitive
gl.glBegin(GL_QUAD_STRIP);
gl.glVertex(…); Punkt 1gl.glVertex(…); Punkt 2gl.glVertex(…); Punkt 3gl.glVertex(…); Punkt 4usw. …
gl.glEnd();
1
3
2
4
6
5
![Page 30: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/30.jpg)
Prof. Dr. V. StahlOpenGL for Java
OpenGL Primitive
gl.glBegin(GL_POLYGON);
gl.glVertex(…); Punkt 1gl.glVertex(…); Punkt 2gl.glVertex(…); Punkt 3usw. …
gl.glEnd();
1
3
24
5
Ränder dürfen sich nicht schneiden, sonst ist unklar was innen und außen ist!
1
2 3
4
5
Die Eckpunkte müssen alle in einer Ebene liegen,sonst ist unklar welche Fläche gemalt werden soll!
Polygone müssen konvex sein!
1
2 3
4
5
![Page 31: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/31.jpg)
Prof. Dr. V. StahlOpenGL for Java
PolygoneGL_TRIANGLES, GL_QUADS, GL_POLYGON
Def. Vorderseite: Reihenfolge der Eckpunkte gegen Uhrzeigersinn
1 2
3
12
3
Vorderseite Rückseite
1 2
34 1 2
34
![Page 32: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/32.jpg)
Prof. Dr. V. StahlOpenGL for Java
Polygone
gl.glPolygonMode( GL_FRONT, GL_POINT )GL_BACK GL_LINE
GL_FRONT_AND_BACK GL_FILL
gl.glEnable(GL_CULL_FACE)
Polygone gefüllt, als Linien oder nur die Eckpunkte zeichnen
gl.glCullFace( GL_FRONT )GL_BACKGL_FRONT_AND_BACK
Nur Vorderseite/Rückseite zeichnen
Effizienz Verdeckte Flächen bei geschlossenen Körpern
![Page 33: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/33.jpg)
Prof. Dr. V. StahlOpenGL for Java
Bewegte GrafikBewegte Grafik
Starten und anhalten
Geschwindigkeit (Bilder pro Sekunde)
super.setAnimateFps(60.0);
super.start();super.stop();
In der init Methode
// 60 Aufrufe von display() pro Sekunde
![Page 34: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/34.jpg)
Prof. Dr. V. StahlOpenGL for Java
TriangleAnimation, TriangleAnimationView
Bewegte GrafikBewegte Grafik
Rotierendes Dreieck um seine (lokale) y-Achse
Vorderseite ausgefüllt, Rückseite Linien
![Page 35: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/35.jpg)
Prof. Dr. V. StahlOpenGL for Java
Cube, CubeLight
3D Grafik
Problem: Kein „richtiger“ 3D Eindruck wenn Flächen ausgefüllt sind!
Lösung: Licht und Schatten
Lichtquellen(Position, Richtung, Farbe, Ausbreitung, …)
Oberflächen(Normalenvektor, Reflektionseigenschaften, Farbe, …)
3D Grafik3D Grafik
![Page 36: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/36.jpg)
Prof. Dr. V. StahlOpenGL for Java
Mehr Mathematik…
Normalenvektoren
Licht Reflektion
![Page 37: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/37.jpg)
CubeLightView
Prof. Dr. V. StahlOpenGL for Java
ohne Glanz
Diffuse Reflektion…
mit Glanz
![Page 38: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/38.jpg)
Prof. Dr. V. StahlOpenGL for Java
Normalenvektoren
gl.glBegin(GL_QUADS);
// Vorderseitegl.glNormal3f( 0.0f, 0.0f, 1.0f);gl.glVertex3f(-1.0f,-1.0f, 1.0f); gl.glVertex3f( 1.0f,-1.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, 1.0f);
// Rechte Seitegl.glNormal3f( 1.0f, 0.0f, 0.0f);gl.glVertex3f( 1.0f,-1.0f, 1.0f);gl.glVertex3f( 1.0f,-1.0f,-1.0f);gl.glVertex3f( 1.0f, 1.0f,-1.0f);gl.glVertex3f( 1.0f, 1.0f, 1.0f);
// usw…
gl.glEnd()
![Page 39: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/39.jpg)
Prof. Dr. V. StahlOpenGL for Java
Normalenvektoren
gl.glNormal3f( 0.0f, 0.0f, 1.0f);
Aktuellen Normalenvektor setzen.
Dieser bleibt so lange gültig, bis ein neuer Normalenvektor gesetzt wird
Möglich: An jedem Eckpunkt ein anderer „Normalenvektor“.Anwendung: Gekrümmte Flächen, die aus vielen Einzelpolygonen bestehen.Lichtverlauf an den Kanten dann glatter („smooth shading“).
![Page 40: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/40.jpg)
Licht
Prof. Dr. V. StahlOpenGL for Java
// Licht aktivierengl.glEnable(GL_LIGHTING);
// Einzelne Lichtquellen einschalten (maximal 8)gl.glEnable(GL_LIGHT0);gl.glEnable(GL_LIGHT1);gl.glEnable(GL_LIGHT2);
Ab jetzt Farbberechnung nur noch mit Licht und Oberflächen!Aufrufe von glColor werden ignoriert!
![Page 41: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/41.jpg)
Licht
Prof. Dr. V. StahlOpenGL for Java
// Farbe der i-ten Lichtquelle (RGBA)float[] color = { 1.0f, 1.0f, 1.0f, 1.0f }gl.glLightfv( i, GL_DIFFUSE, color);
GL_AMBIENTGL_SPECULAR
// Position der i-ten Lichtquelle// Unendlich weit in z-Richtung, daher parallele Strahlenfloat[] position = { 0.0f, 0.0f, 1.0f, 0.0f };gl.glLightfv( i, GL_POSITION, position );
![Page 42: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/42.jpg)
Licht
Prof. Dr. V. StahlOpenGL for Java
// Öffnungswinkel der Lichtstrahlengl.glLightf( i, GL_SPOT_CUTOFF, angle);
// Richtung der Lichtstrahlenfloat[] direction = { 0.0f, 0.0f, -1.0f }gl.glLightfv( i, GL_SPOT_DIRECTION, direction );
(Spotligh
t)
// Exponentielles Abfallen von der Mitte zum Randgl.glLightf( i, GL_SPOT_Exponent, exp);
direction
angle
position
![Page 43: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/43.jpg)
Material
Prof. Dr. V. StahlOpenGL for Java
// Reflektionseigenschaften (RGBA)float[] color = { 1.0f, 0.0f, 0.0f, 1.0 }gl.glMaterialfv( GL_FRONT, GL_DIFFUSE, color );
GL_BACK GL_AMBIENTGL_FRONT_AND_BACK GL_SPECULAR
GL_AMBIENT_AND_DIFFUSEGL_EMISSION
// Glanz (für specular reflection)gl.glMaterialf( GL_FRONT, GL_SHININESS, factor);
GL_BACKGL_FRONT_AND_BACK
![Page 44: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/44.jpg)
Material
Prof. Dr. V. StahlOpenGL for Java
Weißen, rotierenden Würfel mit einem roten und einem blauen Spotlightanstrahlen. Die Lichtquellen drehen sich nicht mit!
Was passiert wenn man backface culling abschaltet?
Würde ein nicht-konvexes Objekt richtig dargestellt?
CubeSpot
![Page 45: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/45.jpg)
Prof. Dr. V. StahlOpenGL for Java
Texturen
Idee: Bild auf die Oberflächen von Objekten kleben
CubeTexture
1
Texturbild10
0
Polygon
Jedem Eckpunkt des Polygons einen Punkt der Textur zuordnen.Texturkoordinaten: glTexCoord2f()
Farbwerte innerhalb des Polygons durch Interpolation.
![Page 46: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/46.jpg)
Prof. Dr. V. StahlOpenGL for Java
import gl4java.utils.textures.PngTextureLoader;
Texturen
// Texturbild lesen (Abmessungen müssen 2er Potenz sein!)PngTextureLoader texload = new PngTextureLoader(gl, glu);texload.readTexture("textures/ambrosil.png");
// InterpolationglTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
GL_TEXTURE_MIN_FILTER GL_NEAREST
// Textur in Speicher auf Grafik Karte ladenglTexImage2D( GL_TEXTURE_2D, 01, GL_RGB,
texload.getImageWidth(), texload.getImageHeight(), 02, GL_RGB, GL_UNSIGNED_BYTE, texload.getTexture() );
1Mip Maps2Rand
![Page 47: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/47.jpg)
Prof. Dr. V. StahlOpenGL for Java
Texturen
Zwei rotierende Marmorwürfel nebeneinander zeichnenso dass sie sich überschneiden.Jeder Würfel dreht sich um eine Achse durch seinen Mittelpunkt!
Würfel zeichnen in eigene Methode kapseln und zweimal aufrufen.
Momentane Matrix auf Stapel speichern bzw. zurück holen:glPushMatrix, glPopMatrix
Hidden Surface Problem: gl.glEnable(GL_DEPTH_TEST);z-Puffer AlgorithmusWarum reicht backface culling nicht mehr aus?
CubeIntersect
![Page 48: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/48.jpg)
Prof. Dr. V. StahlOpenGL for Java
GLU Quadrics
// Quadric erzeugen bzw. löschenlong quad = glu.gluNewQuadric();glu.gluDeleteQuadric( quad );
Kugel, Zylinder, Scheibe
// Kugelglu.gluSphere( quad, radius, kuchenstücke, stapel );
// Zylinderglu.gluCylinder( quad, radius_unten, radius_oben,
höhe, kuchenstücke, stapel );
// Scheibeglu.gluDisk( quad, radius_innen, radius_außen,
kuchenstücke, ringe );
![Page 49: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/49.jpg)
Prof. Dr. V. StahlOpenGL for Java
GLU Quadrics
// Darstellungglu.gluQuadricDrawStyle( quad, GLU_FILL );
GLU_POINTGLU_LINEGLU_SHILOUETTE
// Normalenvektoren automatisch erzeugenglu.gluQuadricNormals( quad, GLU_SMOOTH );
GLU_FLATGLU_NONE
// Texturkoordinaten automatisch erzeugenglu.gluQuadricTexture( quad, GL_TRUE );
GL_FALSE
Quadric
![Page 50: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/50.jpg)
EarthMoon
Prof. Dr. V. StahlOpenGL for Java
GLU Quadrics
Flat shading statt smooth shading bei derBerechnung der Normalenvektoren
Mond um Erde kreisen lassen (moon.png)
// Platz für ID’s für 2 Texturobjekteint[] textures = new int[2];
// Texturobjekte erzeugen, ID’s in textures speicherngl.glGenTextures(2, textures);
// i-te Textur zur aktuellen Textur machengl.glBindTexture(GL_TEXTURE_2D, textures[i]);
Texturen in init-Methode laden und auf Grafikkarte speichern
![Page 51: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/51.jpg)
Prof. Dr. V. StahlOpenGL for Java
Positionierung der Kamera
glu.gluLookAt(double eyex, double eyey, double eyez, // Punktvektordouble atx, double aty, double atz, // Punktvektordouble upx, double upy, double upz // Richtungsvektor
);
eye
at
up
![Page 52: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/52.jpg)
Prof. Dr. V. StahlOpenGL for Java
In „Wirklichkeit“ wird die gesamte Szene bewegt!Die Kamera steht nach wie vor im Koordinatenursprungund schaut in negative z-Richtung.
Multiplikation der Model View Matrix mit einer entsprechenden Matrix von links.(Transformation bzgl. Ursprungskoordinatensystem!)
Positionierung der Kamera
glu.gluLookAt(double eyex, double eyey, double eyez, // Punktvektordouble atx, double aty, double atz, // Punktvektordouble upx, double upy, double upz // Richtungsvektor
);
Daher: gluLookAt gleich nach glLoadIdentity aufrufen!
![Page 53: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/53.jpg)
Prof. Dr. V. StahlOpenGL for Java
Positionierung der Kamera
// Klasse Canvas3D ist Key Listenerclass Canvas3D extends GLAnimCanvas implements KeyListener
// Im Konstruktor von Canvas3DaddKeyListener(this);
import java.awt.event.KeyEvent;import java.awt.event.KeyListener;
// Callback Funktionenpublic void keyTyped(KeyEvent e){}public void keyReleased(KeyEvent e){}public void keyPressed(KeyEvent e) { … }
Kamera mit Cursor Tasten in x- und y-Richtung bewegen.Kamera soll dabei immer gerade aus in negative z-Richtung schauen.
![Page 54: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/54.jpg)
Prof. Dr. V. StahlOpenGL for Java
LookAt, LookAtView
![Page 55: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/55.jpg)
Prof. Dr. V. StahlOpenGL for Java
Picking & Selection
Ziel:
Problem:
Vorgehen:
Bild intern neu zeichnen, allerdings nur einen ca. 4x4 PixelAusschnitt um die aktuelle Mausposition.
Mitprotokollieren welches Objekt in welcher Tiefe gemalt wurde.Ergebnisliste (Objekte mit Tiefeninformation) auswerten.
Verdeckungen (welches Objekt wurde angeklickt?) Umrechnen von Mauskoordinaten in Weltkoordinaten
3D Objekte mit der Maus anklicken
Pick
![Page 56: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/56.jpg)
Prof. Dr. V. StahlOpenGL for Java
Picking & Selection
Ausschnitt um die aktuelle Mausposition (x,y) zeichnen. Dazu PickMatrix links an Projektionsmatrix multiplizieren
// Projektionsmatrix neu berechnengl.glLoadIdentity();glu.gluPickMatrix(x,height-y, 4, 4, viewport);glu.gluPerspective(60, 1.0,2.0,4.0);
Liste initialisieren, in der die getroffenen Objekte gespeichert werden.Render Mode auf GL_SELECT setzen.
int[] nameBuffer = new int[100];gl.glSelectBuffer(100,nameBuffer);gl.glRenderMode(GL_SELECT);gl.glInitNames();gl.glPushName(0);
![Page 57: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/57.jpg)
Prof. Dr. V. StahlOpenGL for Java
Picking & Selection
Bild intern neu zeichnen. Objekte durch Zahlen benennen, z.B.
int hits = gl.glRenderMode(GL_RENDER);
gl.glLoadName(42);gl.glRectf(-1.0,1.0,-1.0,1.0);
Auf Render Mode GL_RENDER zurückschalten.
1minimale und maximale Tiefe des getroffenen AusschnittsObjektname, der während des Zeichnens mit glLoadName gesetzt wurde
Für jedes getroffene Objekt enthält nameBuffer nun vier Zahlen:
![Page 58: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/58.jpg)
Prof. Dr. V. StahlOpenGL for Java
Picking & Selection
Projektionsmatrix muss danach wieder hergestellt werden!
Tiefeninformation ist unsigned int. Gibt‘s in Java aber nicht!
unsigned int
Angeklicktes Objekt ist dasjenige mit geringster Tiefe(nameBuffer durchsuchen!)
int
230
![Page 59: OpenGL for Java - Mitarbeiter-Servermitarbeiter.hs-heilbronn.de/~vstahl/simu/OpenGLFolien.pdf · OpenGL for Java Prof. Dr. V. Stahl Echtzeit 3D Grafik sehr rechenintensiv Wozu OpenGL?](https://reader033.vdocuments.mx/reader033/viewer/2022050916/5a78e7977f8b9a70238e30ec/html5/thumbnails/59.jpg)
Prof. Dr. V. StahlOpenGL for Java
Erde- Mond System erweitern so dass die Planeten angeklickt werden können.
Angeklickter Planet soll stehen bleiben und sich beimnächsten Klick weiterbewegen.
Picking & Selection