23.12.2013 Aufrufe

OpenGL Crash Course

OpenGL Crash Course

OpenGL Crash Course

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

C A R L<br />

V O N<br />

O S S I E T Z K Y<br />

<strong>OpenGL</strong> <strong>Crash</strong> <strong>Course</strong><br />

Johannes Diemke<br />

Übung im Modul <strong>OpenGL</strong> mit Java<br />

Wintersemester 2010/2011


<strong>OpenGL</strong> <strong>Crash</strong> <strong>Course</strong><br />

Namenskonventionen für Funktionen<br />

Die meisten <strong>OpenGL</strong> Befehle folgen der folgenden<br />

Namenskonvention:<br />

Weitere Beispiele:<br />

◮ void glColor3i(int red, int green, int blue)<br />

◮ void glColor3f(float red, float green, float blue)<br />

◮ void glColor3d(double red, double green, double blue)<br />

◮ void glColor4f(float red, float green, float blue, float alpha)<br />

Intern nutzt <strong>OpenGL</strong> Floats → Performanz!<br />

Johannes Diemke <strong>OpenGL</strong> mit Java WiSe 2010 / 2011 2/10


<strong>OpenGL</strong> <strong>Crash</strong> <strong>Course</strong><br />

Der <strong>OpenGL</strong> Zustandsautomat<br />

Die Art und Weise wie Objekte gezeichnet werden hängt von vielen<br />

Parametern ab:<br />

◮ Ist eine Lichtquelle vorhanden?<br />

◮ Wie sind die Materialeigenschaften?<br />

◮ Soll eine Textur genutzt werden?<br />

◮ . . .<br />

In <strong>OpenGL</strong> werden solche Variablen als Zustandsautomat realisiert<br />

Wird eine Zustandsvariable einmal gesetzt, so behält Sie ihren Wert<br />

bis sie einen neuen Wert zugewiesen bekommt<br />

Viele der Zustandsvariablen können lediglich an- und ausgeschaltet<br />

werden<br />

Johannes Diemke <strong>OpenGL</strong> mit Java WiSe 2010 / 2011 3/10


<strong>OpenGL</strong> <strong>Crash</strong> <strong>Course</strong><br />

Der <strong>OpenGL</strong> Zustandsautomat (Forts.)<br />

Um Zustandsvariablen an- und auszuschalten können die folgenden<br />

Methoden genutzt werden:<br />

public void glEnable(int cap)<br />

public void glDisable(int cap)<br />

Mögliche Parameter sind bspw.:<br />

◮ GL.GL_LIGHTING<br />

◮ GL.GL_CULL_FACE<br />

◮ GL.GL_BLEND<br />

◮ GL.GL_ALPHA_TEST<br />

◮ . . .<br />

Johannes Diemke <strong>OpenGL</strong> mit Java WiSe 2010 / 2011 4/10


<strong>OpenGL</strong> <strong>Crash</strong> <strong>Course</strong><br />

Konstruktion von Objekten<br />

Sollen komplexere Objekte dargestellt werden, so werden diese aus<br />

mehreren kleinen Formen, sogenannten Primitven, zusammengesetzt<br />

Primitive sind ein- oder zwei dimensionale Einheiten wie:<br />

◮ Punkte<br />

◮ Linien<br />

◮ Polygone<br />

◮ . . .<br />

Primitive werden durch die Angabe der Raumkoordinaten ihrer<br />

Eckpunkte im dreidimensionalen Raum definiert<br />

Dabei wird ein kartesisches Koordinatensystem genutzt<br />

Johannes Diemke <strong>OpenGL</strong> mit Java WiSe 2010 / 2011 5/10


<strong>OpenGL</strong> <strong>Crash</strong> <strong>Course</strong><br />

Konstruktion von Objekten (Forts.)<br />

Zur Festlegung eines solchen Eckpunktes (engl. ”<br />

Vertex“) steht der<br />

folgende Befehl zur Verfügung:<br />

void glVertex3f(float x, float y, float z)<br />

Beispiel<br />

Ein durch glVertex3f(50.0f, 50.0f, 0.0f) festgelegter Eckpunkt<br />

Johannes Diemke <strong>OpenGL</strong> mit Java WiSe 2010 / 2011 6/10


<strong>OpenGL</strong> <strong>Crash</strong> <strong>Course</strong><br />

Konstruktion von Objekten (Forts.)<br />

Primitive können mit Hilfe eines glBegin/glEnd-Paares gezeichnet<br />

werden<br />

Dabei bestimmt der Parameter der glBegin-Methode die zu<br />

zeichnenden Primitive:<br />

◮ GL.GL_POINTS<br />

◮ GL.GL_LINES<br />

◮ GL.GL_LINE_STRIP<br />

◮ . . .<br />

In dem glBegin/glEnd-Paar werden die Eckpunkte der zu<br />

zeichnenden Primitive eingeschlossen<br />

Johannes Diemke <strong>OpenGL</strong> mit Java WiSe 2010 / 2011 7/10


<strong>OpenGL</strong> <strong>Crash</strong> <strong>Course</strong><br />

<strong>OpenGL</strong> Primitive im Überblick<br />

Johannes Diemke <strong>OpenGL</strong> mit Java WiSe 2010 / 2011 8/10


<strong>OpenGL</strong> <strong>Crash</strong> <strong>Course</strong><br />

Beispiele<br />

Zeichne zwei Punkte mit den Raumkoordinaten (0, 0, 0) und<br />

(50, 50, 50)<br />

gl.glBegin(GL.GL_POINTS);<br />

gl.glVertex3f( 0.0f, 0.0f, 0.0f);<br />

gl.glVertex3f(50.0f, 50.0f, 50.0f);<br />

gl.glEnd();<br />

Zeichne ein Liniensegment zwischen den beiden Raumkoordinaten<br />

(30, 30, 30) und (60, 60, 60)<br />

gl.glBegin(GL.GL_LINES);<br />

gl.glVertex3f(30.0f, 30.0f, 30.0f);<br />

gl.glVertex3f(60.0f, 60.0f, 60.0f);<br />

gl.glEnd();<br />

Johannes Diemke <strong>OpenGL</strong> mit Java WiSe 2010 / 2011 9/10


Literatur<br />

<br />

<br />

<br />

<br />

Dave Shreiner<br />

<strong>OpenGL</strong> Programming Guide<br />

http://www.opengl-redbook.com/<br />

Richard S. Wright, Benjamin Lipchak und Nicholas Haemel<br />

<strong>OpenGL</strong> SuperBibel<br />

http://www.starstonesoftware.com/<strong>OpenGL</strong>/<br />

Randi J. Rost<br />

<strong>OpenGL</strong> Shading Language<br />

http://www.3dshaders.com/<br />

Tomas Akenine-Möller, Eric Haines und Naty Hoffman<br />

Real-Time Rendering<br />

http://www.realtimerendering.com/<br />

Johannes Diemke <strong>OpenGL</strong> mit Java WiSe 2010 / 2011 10/10

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!