Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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

656 Aufrufe

Veröffentlicht am

  • Als Erste(r) kommentieren

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

×