SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
CARL
      VON
OSSIETZKY
            Texture-Mapping

            Johannes Diemke

            ¨
            Ubung im Modul OpenGL mit Java
            Wintersemester 2010/2011
Texture-Mapping


Grundlagen
   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 Ober߬chen durch Bilder
                                         a




   Johannes Diemke              OpenGL mit Java              WiSe 2010 / 2011   2/18
Texture-Mapping


Teekanne mit Texturen




   Johannes Diemke      OpenGL mit Java   WiSe 2010 / 2011   3/18
Texture-Mapping


Reflection-Mapping in Terminator 2 (1991)




   Johannes Diemke      OpenGL mit Java    WiSe 2010 / 2011   4/18
Texture-Mapping


Texturen 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
Texture-Mapping


Einschub: Textur-Zustand
   Umfasst f¨r das Texture-Mapping relevante Eigenschaften
            u
         Textur
         Filter
         Wrap-Mode

Textur-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
Texture-Mapping


Textur-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
Texture-Mapping


Textur-Objekte (Forts.)
     Erzeugen, Binden und Konfigurieren des Textur-Zustandes
int textureId = genTexture(gl);

gl.glBindTexture(GL2.GL_TEXTURE_2D, textureId);

// texture filter
gl.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 mode
gl.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 data
gl.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
Texture-Mapping


Verwenden 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
Texture-Mapping


Abbilden 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
Texture-Mapping


Wo 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
Texture-Mapping


Wo kommen die Bilddaten her? (Forts.)
     OpenGL ben¨tigt die Bilddaten in Form eines Buffer-Objektes
               o

ByteBuffer buffer = ByteBuffer.allocateDirect(temp.length * 4);

buffer.order(ByteOrder.nativeOrder());

// convert the image data to the specified format
buffer.put(convertToRGBA(temp));
buffer.rewind();

// load the image data into a texture
gl.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
Texture-Mapping


Texture-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
Secondary-Color


Problem
   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
Secondary-Color


L¨sung
 o
     Die spiegelnde Komponente beim Shading addieren
           Wird Secondary-Specular-Color genannt
           Kann automatisch von OpenGL durchgef¨hrt werden
                                                 u
gl.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
Texture-Mapping


Bei 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
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
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

Weitere ähnliche Inhalte

Mehr von Johannes Diemke

Pfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen PotentialfeldernPfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen PotentialfeldernJohannes Diemke
 
2010-JOGL-12-Projection-Shadows
2010-JOGL-12-Projection-Shadows2010-JOGL-12-Projection-Shadows
2010-JOGL-12-Projection-ShadowsJohannes Diemke
 
2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-KnotenJohannes Diemke
 
2010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt052010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt05Johannes Diemke
 
2010-JOGL-05-Transformationen
2010-JOGL-05-Transformationen2010-JOGL-05-Transformationen
2010-JOGL-05-TransformationenJohannes Diemke
 
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-RemovalJohannes Diemke
 
2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung2010-JOGL-02-Einfuehrung
2010-JOGL-02-EinfuehrungJohannes Diemke
 
2010-JOGL-01-Organisation
2010-JOGL-01-Organisation2010-JOGL-01-Organisation
2010-JOGL-01-OrganisationJohannes Diemke
 
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)Johannes Diemke
 
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)Johannes Diemke
 
Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Johannes Diemke
 
Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Johannes Diemke
 
Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Johannes Diemke
 
Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Johannes Diemke
 
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010
Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010Johannes Diemke
 
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)Johannes Diemke
 
Agile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: ScrumAgile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: ScrumJohannes Diemke
 
Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)Johannes Diemke
 

Mehr von Johannes Diemke (20)

Polymorphie
PolymorphiePolymorphie
Polymorphie
 
Pfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen PotentialfeldernPfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen Potentialfeldern
 
2010-JOGL-12-Projection-Shadows
2010-JOGL-12-Projection-Shadows2010-JOGL-12-Projection-Shadows
2010-JOGL-12-Projection-Shadows
 
2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten
 
2010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt052010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt05
 
2010-JOGL-05-Transformationen
2010-JOGL-05-Transformationen2010-JOGL-05-Transformationen
2010-JOGL-05-Transformationen
 
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
 
2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung
 
2010-JOGL-01-Organisation
2010-JOGL-01-Organisation2010-JOGL-01-Organisation
2010-JOGL-01-Organisation
 
Boost C++ Libraries
Boost C++ LibrariesBoost C++ Libraries
Boost C++ Libraries
 
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
 
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
 
Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)
 
Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)
 
Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Theory Exploration (Vortrag)
Theory Exploration (Vortrag)
 
Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)
 
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010
Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010
 
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
 
Agile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: ScrumAgile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: Scrum
 
Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)
 

2010-JOGL-09-Texture-Mapping

  • 1. CARL VON OSSIETZKY Texture-Mapping Johannes Diemke ¨ Ubung im Modul OpenGL mit Java Wintersemester 2010/2011
  • 2. Texture-Mapping Grundlagen 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. Texture-Mapping Teekanne mit Texturen Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 3/18
  • 4. Texture-Mapping Reflection-Mapping in Terminator 2 (1991) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 4/18
  • 5. Texture-Mapping Texturen 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. Texture-Mapping Einschub: Textur-Zustand Umfasst f¨r das Texture-Mapping relevante Eigenschaften u Textur Filter Wrap-Mode Textur-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. Texture-Mapping Textur-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. Texture-Mapping Textur-Objekte (Forts.) Erzeugen, Binden und Konfigurieren des Textur-Zustandes int textureId = genTexture(gl); gl.glBindTexture(GL2.GL_TEXTURE_2D, textureId); // texture filter gl.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 mode gl.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 data gl.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. Texture-Mapping Verwenden 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. Texture-Mapping Abbilden 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. Texture-Mapping Wo 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. Texture-Mapping Wo kommen die Bilddaten her? (Forts.) OpenGL ben¨tigt die Bilddaten in Form eines Buffer-Objektes o ByteBuffer buffer = ByteBuffer.allocateDirect(temp.length * 4); buffer.order(ByteOrder.nativeOrder()); // convert the image data to the specified format buffer.put(convertToRGBA(temp)); buffer.rewind(); // load the image data into a texture gl.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. Texture-Mapping Texture-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. Secondary-Color Problem 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. Secondary-Color L¨sung o Die spiegelnde Komponente beim Shading addieren Wird Secondary-Specular-Color genannt Kann automatisch von OpenGL durchgef¨hrt werden u gl.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. Texture-Mapping Bei 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. 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. 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