2010-JOGL-09-Texture-Mapping
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

2010-JOGL-09-Texture-Mapping

  • 442 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
442
On Slideshare
442
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
0
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. CARL VONOSSIETZKY Texture-Mapping Johannes Diemke ¨ Ubung im Modul OpenGL mit Java Wintersemester 2010/2011
  • 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. Texture-MappingTeekanne mit Texturen Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 3/18
  • 4. Texture-MappingReflection-Mapping in Terminator 2 (1991) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 4/18
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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