CARL      VONOSSIETZKY            Geometrische Primitive und            Hidden Surface Removal            Johannes Diemke ...
WiederholungGeometrische Primitive in OpenGL     Mit nur wenigen einfachen Bausteinen k¨nnen hochkomplexe                 ...
Geometrische PrimitiveDarstellung von Punkten     Der Parameter GL.GL_POINTS l¨sst OpenGL die Liste der Vertices als      ...
Geometrische PrimitiveDarstellung von Liniensegmenten     Der Parameter GL.GL_LINES l¨sst OpenGL jeweils zwei Vertices der...
Geometrische PrimitiveDarstellung von Linienz¨gen                       u   Der Parameter   GL.GL_LINE_STRIP l¨sst OpenGL ...
Geometrische PrimitiveDarstellung von geschlossenen Linienz¨gen                                     u   Der Parameter GL.G...
Geometrische PrimitiveDarstellung von Dreiecken   Der Parameter GL.GL_TRIANGLES   l¨sst OpenGL die Liste der    a   Vertic...
Geometrische PrimitiveEinschub: Polygon Winding   Die Kombination aus Ordnung und Richtung in der die Vertices   angegeben...
Geometrische PrimitiveDarstellung von Triangle Strips   Der Parameter GL.GL_TRIANGLE_STRIP l¨sst OpenGL die Liste der     ...
Geometrische PrimitiveDarstellung von Triangle Fans   Der Parameter GL.GL_TRIANGLE_FAN l¨sst OpenGL die Liste der Vertices...
Geometrische PrimitiveColor Shading Model   Farben werden pro Vertex festgelegt   Das Shading Model bestimmt, ob ein Polyg...
Hidden Surface RemovalDepth Buffer   In der Standardeinstellung von OpenGL erscheint das zuletzt   gezeichnete Objekt uber ...
Hidden Surface RemovalDepth Buffer (Forts.)   Johannes Diemke     OpenGL mit Java   WiSe 2010 / 2011   13/23
Hidden Surface RemovalDepth Buffer (Forts.)   Johannes Diemke     OpenGL mit Java   WiSe 2010 / 2011   14/23
Hidden Surface RemovalDepth Buffer (Forts.)   Der Depth Buffer muss vor jedem Rendern der Szene geleert werden   public void...
Hidden Surface DeterminationBack-Face Culling   Das Back-face Culling vermeidet das Zeichnen der R¨ckseiten von           ...
Hidden Surface DeterminationBack-Face Culling (Forts.)   Zum Bestimmen der Vorder- und R¨ckseite eines Polygons wird      ...
Geometrische PrimitivePolygon Modes   Polygone m¨ssen nicht grunds¨tzlich mit einer Farbe gef¨llt sein              u     ...
Geometrische PrimitiveKonstruktionsregeln f¨r Polygone                     u   Alle Polygone m¨ssen planar sein           ...
Geometrische PrimitiveKonstruktionsregeln f¨r Polygone (Forts.)                     u   Es darf keine Schnittpunkte zwisch...
GrafikprogrammierungEin etwas anderes Beispiel ...    Johannes Diemke        OpenGL mit Java   WiSe 2010 / 2011   21/23
Literatur und Links Mason Woo, Jackie Neider, Tom Davis und Dave Shreiner OpenGL Programming Guide http://www.opengl.org/d...
Literatur und Links Fletcher Dunn und Ian Parberry 3D Math Primer For Graphics and Game Development http://www.gamemath.co...
Nächste SlideShare
Wird geladen in …5
×

2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal

685 Aufrufe

Veröffentlicht am

0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
685
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
3
Aktionen
Geteilt
0
Downloads
5
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal

  1. 1. CARL VONOSSIETZKY Geometrische Primitive und Hidden Surface Removal Johannes Diemke ¨ Ubung im Modul OpenGL mit Java Wintersemester 2010/2011
  2. 2. WiederholungGeometrische Primitive in OpenGL Mit nur wenigen einfachen Bausteinen k¨nnen hochkomplexe o Strukturen erstellt werden Diese Bausteine werden in OpenGL Primitive genannt Es existieren genau 10 verschiedene Primitivegl.glColor3f(0.65f, 0.85f, 0.65f);gl.glBegin(GL.GL_TRIANGLES); gl.glVertex3f(-2.0f, -1.0f, 0.0f); gl.glVertex3f( 2.0f, -1.0f, 0.0f); gl.glVertex3f( 0.0f, 1.0f, 0.0f);gl.glEnd(); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 2/23
  3. 3. Geometrische PrimitiveDarstellung von Punkten Der Parameter GL.GL_POINTS l¨sst OpenGL die Liste der Vertices als a Punkte interpretieren Die Punktgr¨ße kann mit der Methode glPointSize(float size) o gesetzt werden Vorsicht! Nicht alle Punktgr¨ßen werden unterst¨tzt o ufloat range[] = new float[2];gl.glGetFloatv(GL.GL_POINT_SIZE_RANGE, range, 0);float step[] = new float[1];gl.glGetFloatv(GL.GL_POINT_SIZE_GRANULARITY, step, 0);gl.glPointSize(range[0]);gl.glBegin(GL.GL_POINTS); gl.glVertex3f(-2.0f, -1.0f, 0.0f); gl.glVertex3f( 2.0f, 1.0f, 0.0f);gl.glEnd(); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 3/23
  4. 4. Geometrische PrimitiveDarstellung von Liniensegmenten Der Parameter GL.GL_LINES l¨sst OpenGL jeweils zwei Vertices der a Liste als Liniensegment interpretieren Die Linienbreite kann mit der Methode glLineWidth(float width) gesetzt werden Vorsicht! Nicht alle Linienbreiten werden unterst¨tzt ufloat range[] = new float[2];gl.glGetFloatv(GL.GL_LINE_WIDTH_RANGE, range, 0);float step[] = new float[1];gl.glGetFloatv(GL.GL_LINE_WIDTH_GRANULARITY, step, 0);gl.glLineWidth(range[1]);gl.glBegin(GL.GL_LINES); gl.glVertex3f(-2.0f, -1.0f, 0.0f); gl.glVertex3f( 2.0f, 1.0f, 0.0f);gl.glEnd(); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 4/23
  5. 5. Geometrische PrimitiveDarstellung von Linienz¨gen u Der Parameter GL.GL_LINE_STRIP l¨sst OpenGL die Liste a der Vertices als Linienzug interpretieren gl.glBegin(GL.GL_LINE_STRIP); gl.glVertex3f( 0.0f, 0.0f, 0.0f); gl.glVertex3f(50.0f, 50.0f, 0.0f); gl.glVertex3f(50.0f, 100.0f, 0.0f); gl.glEnd(); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 5/23
  6. 6. Geometrische PrimitiveDarstellung von geschlossenen Linienz¨gen u Der Parameter GL.GL_LINE_LOOP l¨sst OpenGL die Liste der Vertices a als geschlossenen Linienzug interpretieren gl.glBegin(GL.GL_LINE_LOOP); gl.glVertex3f( 0.0f, 0.0f, 0.0f); gl.glVertex3f(50.0f, 50.0f, 0.0f); gl.glVertex3f(50.0f, 100.0f, 0.0f); gl.glEnd(); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 6/23
  7. 7. Geometrische PrimitiveDarstellung von Dreiecken Der Parameter GL.GL_TRIANGLES l¨sst OpenGL die Liste der a Vertices als Dreiecke interpretieren gl.glBegin(GL.GL_TRIANGLES); gl.glVertex3f( 0.0f, 0.0f, 0.0f); gl.glVertex3f(25.0f, 25.0f, 0.0f); gl.glVertex3f(50.0f, 0.0f, 0.0f); gl.glVertex3f(-50.0f, 0.0f, 0.0f); gl.glVertex3f(-75.0f, 50.0f, 0.0f); gl.glVertex3f(-25.0f, 0.0f, 0.0f); gl.glEnd(); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 7/23
  8. 8. Geometrische PrimitiveEinschub: Polygon Winding Die Kombination aus Ordnung und Richtung in der die Vertices angegeben werden wird als Winding bezeichnet In der Standardeinstellung nimmt OpenGL Polygone mit einem CCW-Winding als front facing an Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 8/23
  9. 9. Geometrische PrimitiveDarstellung von Triangle Strips Der Parameter GL.GL_TRIANGLE_STRIP l¨sst OpenGL die Liste der a Vertices folgendermaßen als Gruppe verbundener Dreiecke interpretieren: Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 9/23
  10. 10. Geometrische PrimitiveDarstellung von Triangle Fans Der Parameter GL.GL_TRIANGLE_FAN l¨sst OpenGL die Liste der Vertices a folgendermaßen als Gruppe verbundener Dreiecke interpretieren: Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 10/23
  11. 11. Geometrische PrimitiveColor Shading Model Farben werden pro Vertex festgelegt Das Shading Model bestimmt, ob ein Polygon eine feste Farbe oder einen weichen Farbverlauf zwischen den f¨r jeden Vertex u festgelegten Farben besitzt Es wird mit der Methode glShadeModel(int mode) gesetzt // enable flat shading gl.glShadeModel(GL.GL_FLAT); ... // enable smooth shading gl.glShadeModel(GL.GL_SMOOTH); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 11/23
  12. 12. Hidden Surface RemovalDepth Buffer In der Standardeinstellung von OpenGL erscheint das zuletzt gezeichnete Objekt uber einem zuvor gezeichneten Objekt ¨ Dies gilt selbst, wenn das zuletzt gezeichnete Objekt r¨umlich hinter a anderen liegt Dies kann mit dem Depth Testing korrigiert werden → Depth Buffer // enable depth testing gl.glEnable(GL.GL_DEPTH_TEST); ... // disable depth testing gl.glDisable(GL.GL_DEPTH_TEST); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 12/23
  13. 13. Hidden Surface RemovalDepth Buffer (Forts.) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 13/23
  14. 14. Hidden Surface RemovalDepth Buffer (Forts.) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 14/23
  15. 15. Hidden Surface RemovalDepth Buffer (Forts.) Der Depth Buffer muss vor jedem Rendern der Szene geleert werden public void display(GLAutoDrawable drawable) { GL2 gl = drawable.getGL().getGL2(); // clear the color and depth buffer gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glLoadIdentity(); gl.glTranslatef(0.0f, 0.0f, -5.0f); ... } Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 15/23
  16. 16. Hidden Surface DeterminationBack-Face Culling Das Back-face Culling vermeidet das Zeichnen der R¨ckseiten von u Polygonen Das ist sinnvoll bei geschlossenen K¨rpern, die nur von außen o betrachtet werden k¨nnen o Ein Spezialfall tritt bei transparenten Objekten ein → blending // enable back-face culling gl.glEnable(GL.GL_CULL_FACE); ... // disable back-face culling gl.glDisable(GL.GL_CULL_FACE); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 16/23
  17. 17. Hidden Surface DeterminationBack-Face Culling (Forts.) Zum Bestimmen der Vorder- und R¨ckseite eines Polygons wird u dessen Winding betrachtet Daher ist es wichtig das Polygon-Winding konsistent zu halten if(bCull) { // enable back-face culling gl.glEnable(GL.GL_CULL_FACE); } else { // disable back-face culling gl.glDisable(GL.GL_CULL_FACE); } Die Festlegung der Vorder- und R¨ckseiten geschieht mit der u Methode glFrontFace(int mode) // clockwise-wound polygons are front facing gl.glFrontFace(GL.GL_CW); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 17/23
  18. 18. Geometrische PrimitivePolygon Modes Polygone m¨ssen nicht grunds¨tzlich mit einer Farbe gef¨llt sein u a u Mit der Methode glPolygonMode(int face, int mode) l¨sst sich festlegen, a wie Polygone dargestellt werden sollen: GL.GL_POINT GL.GL_LINE GL.GL_FILL if(bOutline) { // draw polygons as outlines gl.glPolygonMode(GL.GL_BACK, GL_LINE) } else { // draw polygons solid gl.glPolygonMode(GL.GL_BACK, GL_FILL) } Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 18/23
  19. 19. Geometrische PrimitiveKonstruktionsregeln f¨r Polygone u Alle Polygone m¨ssen planar sein u Die Vertices eines Polygons m¨ssen immer in genau einer Ebene liegen u Bei Dreiecken ist das uberhaupt kein Problem ¨ Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 19/23
  20. 20. Geometrische PrimitiveKonstruktionsregeln f¨r Polygone (Forts.) u Es darf keine Schnittpunkte zwischen den Kanten eines Polygons geben Polygone m¨ssen konvex sein: u Jede Strecke zweier Punkte des Polygons liegt vollst¨ndig in ihm a Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 20/23
  21. 21. GrafikprogrammierungEin etwas anderes Beispiel ... Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 21/23
  22. 22. Literatur und Links Mason Woo, Jackie Neider, Tom Davis und Dave Shreiner OpenGL Programming Guide http://www.opengl.org/documentation/red book/ Randi J. Rost OpenGL Shading Language http://www.3dshaders.com/ Richard S. Wright und Michael Sweet OpenGL SuperBibel http://www.starstonesoftware.com/OpenGL/ Tomas M¨ller und Eric Haines o Real-Time Rendering http://www.realtimerendering.com/ Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 22/23
  23. 23. Literatur und Links Fletcher Dunn und Ian Parberry 3D Math Primer For Graphics and Game Development http://www.gamemath.com/ Khronos Group OpenGL Homepage http://www.opengl.org/ Game Technology Group at Sun Microsystems JOGL API Project https://jogl.dev.java.net/ Fairlight und The Black Lotus Only one wish http://capped.tv/playeralt.php?vid=1215051083-1-0 Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 23/23

×