CARL      VONOSSIETZKY            Texture-Mapping            Johannes Diemke            ¨            Ubung im Modul OpenGL...
Texture-MappingGrundlagen   Graphische Primitiven werden mit Bildern versehen   Eingef¨hrt von Dr. Edwin Catmull (1974)   ...
Texture-MappingTeekanne mit Texturen   Johannes Diemke      OpenGL mit Java   WiSe 2010 / 2011   3/18
Texture-MappingReflection-Mapping in Terminator 2 (1991)   Johannes Diemke      OpenGL mit Java    WiSe 2010 / 2011   4/18
Texture-MappingTexturen in OpenGL   Mussten fr¨her POT (Power-Of-Two) sein             u         Breite und H¨he sind 2er-...
Texture-MappingEinschub: Textur-Zustand   Umfasst f¨r das Texture-Mapping relevante Eigenschaften            u         Tex...
Texture-MappingTextur-Objekte (Forts.)   Erzeugen eines Textur-Objektes   private int genTexture(GL2 gl) {       final int...
Texture-MappingTextur-Objekte (Forts.)     Erzeugen, Binden und Konfigurieren des Textur-Zustandesint textureId = genTextur...
Texture-MappingVerwenden von Textur-Objekten     Texture-Mapping muss zun¨chst eingeschaltet werden                       ...
Texture-MappingAbbilden von Texturen auf Geometrie   Bei eingeschaltetem Texture-Mapping wendet OpenGL die aktuelle   Text...
Texture-MappingWo kommen die Bilddaten her?   Einlesen uber die Klasse ImageIO            ¨   FileInputStream fileInputStr...
Texture-MappingWo kommen die Bilddaten her? (Forts.)     OpenGL ben¨tigt die Bilddaten in Form eines Buffer-Objektes       ...
Texture-MappingTexture-Mapping in JOGL 2.0   JOGL 2.0 bietet Hilfsklassen zum Laden von Texturen   Vereinfacht das Texture...
Secondary-ColorProblem   Texture-Mapping f¨hrt bei beleuchteter Geometrie zu ungewollten                    u   Effekten   ...
Secondary-ColorL¨sung o     Die spiegelnde Komponente beim Shading addieren           Wird Secondary-Specular-Color genann...
Texture-MappingBei Problemen helfen die folgenden Fragen   Sind f¨r jeden Vertex die Texturkoordinaten gesetzt?         u ...
Literatur Dave Shreiner OpenGL Programming Guide http://www.opengl-redbook.com/ Richard S. Wright, Benjamin Lipchak und Ni...
Literatur Edward Angel Interactive Computer Graphics http://www.cs.unm.edu/˜angel/ Gerald Farin und Dianne Hansford Practi...
Nächste SlideShare
Wird geladen in …5
×

2010-JOGL-09-Texture-Mapping

564 Aufrufe

Veröffentlicht am

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

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

Keine Notizen für die Folie

2010-JOGL-09-Texture-Mapping

  1. 1. CARL VONOSSIETZKY Texture-Mapping Johannes Diemke ¨ Ubung im Modul OpenGL mit Java Wintersemester 2010/2011
  2. 2. Texture-MappingGrundlagen Graphische Primitiven werden mit Bildern versehen Eingef¨hrt von Dr. Edwin Catmull (1974) u Texture-Mapping erm¨glicht nahezu realistische Szenen o Reflection-Mapping Bump-Mapping ... Graphikkarte wird entlastet Keine komplexe Geometrie notwendig Details werden in Texturen verlagert Darstellung komplizierter Oberfl¨chen durch Bilder a Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 2/18
  3. 3. Texture-MappingTeekanne mit Texturen Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 3/18
  4. 4. Texture-MappingReflection-Mapping in Terminator 2 (1991) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 4/18
  5. 5. Texture-MappingTexturen in OpenGL Mussten fr¨her POT (Power-Of-Two) sein u Breite und H¨he sind 2er-Potenzen o Moderne Hardware kann mit NPOT (Non-Power-Of-Two) Texturen umgehen Herkunft der Texturdaten Bild vom Sekund¨rspeicher a Prozedural im Prim¨rspeicher a M¨ssen uber spezielle OpenGL-Befehle der Graphikkarte ubergeben u ¨ ¨ werden Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 5/18
  6. 6. Texture-MappingEinschub: Textur-Zustand Umfasst f¨r das Texture-Mapping relevante Eigenschaften u Textur Filter Wrap-ModeTextur-Objekte Textur-Zustand kann an Textur-Objekte gebunden werden Erm¨glicht schnelles Wechseln zwischen Textur-Objekten und den o an ihnen gebundenen Eigenschaften Werden durch einen Integer identifziert Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 6/18
  7. 7. Texture-MappingTextur-Objekte (Forts.) Erzeugen eines Textur-Objektes private int genTexture(GL2 gl) { final int[] tmp = new int[1]; gl.glGenTextures(1, tmp, 0); return tmp[0]; } Binden eines Textur-Objektes uber seine ID ¨ gl.glBindTexture(GL2.GL_TEXTURE_2D, textureId); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 7/18
  8. 8. Texture-MappingTextur-Objekte (Forts.) Erzeugen, Binden und Konfigurieren des Textur-Zustandesint textureId = genTexture(gl);gl.glBindTexture(GL2.GL_TEXTURE_2D, textureId);// texture filtergl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR);gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR);// texture wrap modegl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_S, GL2.GL_CLAMP_TO_EDGE);gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_T, GL2.GL_CLAMP_TO_EDGE);// set image datagl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_RGBA, width, height, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, buffer); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 8/18
  9. 9. Texture-MappingVerwenden von Textur-Objekten Texture-Mapping muss zun¨chst eingeschaltet werden a Identifikation von Textur-Objekten geschieht uber die ID ¨gl.glEnable(GL2.GL_TEXTURE_2D);gl.glBindTexture(GL2.GL_TEXTURE_2D, textureId);gl.glBegin(GL2.GL_QUADS); gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, 1.0f); gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, 1.0f); gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, 1.0f); gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, 1.0f);gl.glEnd(); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 9/18
  10. 10. Texture-MappingAbbilden von Texturen auf Geometrie Bei eingeschaltetem Texture-Mapping wendet OpenGL die aktuelle Textur auf jedes Primitiv an Texturkoordinaten spezifizieren wie die Textur auf die Geometrie abgebildet wird Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 10/18
  11. 11. Texture-MappingWo kommen die Bilddaten her? Einlesen uber die Klasse ImageIO ¨ FileInputStream fileInputStream = new FileInputStream(new File(filename)); BufferedImage bufferedImage = ImageIO.read(fileInputStream); width = bufferedImage.getWidth(); height = bufferedImage.getHeight(); // store pixels in TYPE_INT_ARGB format in packedPixels array int[] packedPixels = new int[width * height]; bufferedImage.getRGB(0, 0, width, height, packedPixels, 0, width); // OpenGL expects textures to be flipped upside down temp = new int[width * height]; for(int x=0; x<width; x++) for(int y=0; y < height; y++) { temp[x + (y * width)] = packedPixels[x + ((height - 1 - y) * width)]; } Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 11/18
  12. 12. Texture-MappingWo kommen die Bilddaten her? (Forts.) OpenGL ben¨tigt die Bilddaten in Form eines Buffer-Objektes oByteBuffer buffer = ByteBuffer.allocateDirect(temp.length * 4);buffer.order(ByteOrder.nativeOrder());// convert the image data to the specified formatbuffer.put(convertToRGBA(temp));buffer.rewind();// load the image data into a texturegl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA, width, height, 0, GL.GL_RGBA,GL.GL_UNSIGNED_BYTE, buffer); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 12/18
  13. 13. Texture-MappingTexture-Mapping in JOGL 2.0 JOGL 2.0 bietet Hilfsklassen zum Laden von Texturen Vereinfacht das Texture-Mapping extrem texture = TextureIO.newTexture (new File ("deathstar.png"), false); texture.setTexParameteri(GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); texture.setTexParameteri(GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); texture.setTexParameterf(GL2.GL_TEXTURE_WRAP_S, GL2.GL_CLAMP_TO_EDGE); texture.setTexParameterf(GL2.GL_TEXTURE_WRAP_T, GL2.GL_CLAMP_TO_EDGE); texture.setTexParameteri(GL2.GL_GENERATE_MIPMAP, GL2.GL_TRUE); texture.bind(); deathstar.draw(); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 13/18
  14. 14. Secondary-ColorProblem Texture-Mapping f¨hrt bei beleuchteter Geometrie zu ungewollten u Effekten Texture-Environment ist i. A. auf GL MODULATE gesetzt Beleuchtete Geometrie wird mit der Texture-Map kombiniert Reduziert die Sichtbarkeit der Specular-Highlights Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 14/18
  15. 15. Secondary-ColorL¨sung o Die spiegelnde Komponente beim Shading addieren Wird Secondary-Specular-Color genannt Kann automatisch von OpenGL durchgef¨hrt werden ugl.glLightModeli(GL.GL_LIGHT_MODEL_COLOR_CONTROL,GL.GL_SEPARATE_SPECULAR_COLOR);gl.glLightModeli(GL.GL_LIGHT_MODEL_COLOR_CONTROL,GL.GL_SINGLE_COLOR); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 15/18
  16. 16. Texture-MappingBei Problemen helfen die folgenden Fragen Sind f¨r jeden Vertex die Texturkoordinaten gesetzt? u Ist die Dimension der Textur korrekt? Wurde die Datei gefunden? Sind die Filter richtig gesetzt? Ist das Textur-Mapping eingeschaltet? Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 16/18
  17. 17. Literatur Dave Shreiner OpenGL Programming Guide http://www.opengl-redbook.com/ Richard S. Wright, Benjamin Lipchak und Nicholas Haemel OpenGL SuperBibel http://www.starstonesoftware.com/OpenGL/ Randi J. Rost OpenGL Shading Language http://www.3dshaders.com/ Tomas Akenine-M¨ller, Eric Haines und Naty Hoffman o Real-Time Rendering http://www.realtimerendering.com/ Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 17/18
  18. 18. Literatur Edward Angel Interactive Computer Graphics http://www.cs.unm.edu/˜angel/ Gerald Farin und Dianne Hansford Practical Linear Algebra http://www.farinhansford.com/books/pla/ Fletcher Dunn und Ian Parberry 3D Math Primer for Graphics and Game Development www.gamemath.com/ Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 18/18

×