import java.io.*; /* import java.nio.ByteBuffer; import java.nio.IntBuffer; import java.nio.ByteOrder; import com.sun.opengl.util.BufferUtil; import java.awt.image.*; import javax.imageio.*; import javax.media.opengl.*; import javax.media.opengl.glu.*; import com.sun.opengl.util.*; // GLUT import java.awt.event.*; import javax.swing.*; import com.sun.opengl.util.*; import javax.media.opengl.*; */ import javax.media.opengl.GL; import javax.media.opengl.GLEventListener; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.glu.GLU; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class Textura_Figura implements GLEventListener { private float rotateT = 0.0f; private static final GLU glu = new GLU(); String[] NombreDeTexturas = {"Cafe.png", "Verde.png", "Rojo.png", "Azul.png"}; int NTexturas = NombreDeTexturas.length; int[] ID = new int[NTexturas]; // IDs DE LAS TEXTURAS PARA OpenGL public void display(GLAutoDrawable gLDrawable) { final GL gl = gLDrawable.getGL(); gl.glClear(GL.GL_COLOR_BUFFER_BIT); gl.glClear(GL.GL_DEPTH_BUFFER_BIT); gl.glLoadIdentity(); gl.glTranslatef(0.0f, 0.0f, -5.0f); gl.glRotatef(rotateT, 1.0f, 0.0f, 0.0f); gl.glRotatef(rotateT, 0.0f, 1.0f, 0.0f); gl.glRotatef(rotateT, 0.0f, 0.0f, 1.0f); gl.glRotatef(rotateT, 0.0f, 1.0f, 0.0f); gl.glBindTexture( GL.GL_TEXTURE_2D, ID[0] ); //IMAGEN DE MURO gl.glBegin(GL.GL_TRIANGLES); // Frente gl.glTexCoord2f(0.5f, 0.5f); gl.glVertex3f(0.0f, 1.0f, 0.0f); gl.glTexCoord2f(0.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.glEnd(); // gl.glTexParameterfv(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_REPEAT); // gl.glTexParameterfv(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT); gl.glBindTexture( GL.GL_TEXTURE_2D, ID[1] ); //IMAGEN DE MURO gl.glBegin(GL.GL_TRIANGLES); // DER gl.glTexCoord2f(0.5f, 0.5f); gl.glVertex3f(0.0f, 1.0f, 0.0f); gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(1.0f, -1.0f, 1.0f); gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(0.0f, -1.0f, -1.0f); gl.glEnd(); gl.glBindTexture( GL.GL_TEXTURE_2D, ID[2] ); //IMAGEN DE MURO gl.glBegin(GL.GL_TRIANGLES); // IZQQ gl.glTexCoord2f(0.5f, 0.5f); gl.glVertex3f(0.0f, 1.0f, 0.0f); gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(0.0f, -1.0f, -1.0f); gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(-1.0f, -1.0f, 1.0f); gl.glEnd(); gl.glBindTexture( GL.GL_TEXTURE_2D, ID[3] ); //IMAGEN DE MURO gl.glBegin(GL.GL_TRIANGLES); // Fondo gl.glTexCoord2f(0.5f, 0.5f); gl.glVertex3f(-1.0f, -1.0f, 1.0f); gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(1.0f, -1.0f, 1.0f); gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f(0.0f, -1.0f, -1.0f); gl.glEnd(); rotateT += 0.2f; } public void displayChanged(GLAutoDrawable gLDrawable, boolean modeChanged, boolean deviceChanged) { } public void init(GLAutoDrawable gLDrawable) { final GL gl = gLDrawable.getGL(); final GLU glu = new GLU(); gl.glShadeModel(GL.GL_SMOOTH); gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); gl.glClearDepth(1.0f); gl.glEnable(GL.GL_DEPTH_TEST); gl.glDepthFunc(GL.GL_LEQUAL); gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); gl.glEnable( GL.GL_TEXTURE_2D ); // SE HABILITA EL MANEJO DE TEXTURAS -paso 1- gl.glLightModeli( GL.GL_LIGHT_MODEL_COLOR_CONTROL, GL.GL_SEPARATE_SPECULAR_COLOR ); // SE OTORGA LUMINOSIDAD A LA TEXTURA gl.glGenTextures( NTexturas, ID, 0 ); // SE CREA UN VECTOR DE TEXTURAS -paso 2- TextureReader.Texture Textura = null; for( int N_ID = 0; N_ID < NTexturas; N_ID++ ) // SE LEEN LOS ARCHIVOS DE LAS IMAGENES { Textura = LeerArchivoDeTextura( NombreDeTexturas[N_ID] ); gl.glBindTexture( GL.GL_TEXTURE_2D, ID[N_ID] ); // SE ACTIVA LA TEXTURA QUE SE UTILIZA ACTUALMENTE CargarTexturaAOpenGL( gl, glu, Textura, GL.GL_TEXTURE_2D ); FijarParametrosDeTextura( gl ); // FIJAR PARA TEXTURA ACTUAL } } public void reshape(GLAutoDrawable gLDrawable, int x, int y, int width, int height) { final GL gl = gLDrawable.getGL(); if(height <= 0) { height = 1; } final float h = (float)width / (float)height; gl.glMatrixMode(GL.GL_PROJECTION); gl.glLoadIdentity(); glu.gluPerspective(50.0f, h, 1.0, 1000.0); gl.glMatrixMode(GL.GL_MODELVIEW); gl.glLoadIdentity(); } // ================================================== // SE LEE LA TEXTURA DEL ARCHIVO EN FORMATOS COMO bmp, png, jpg, etc. TextureReader.Texture LeerArchivoDeTextura( String filename ) { TextureReader.Texture texture = null; try { texture = TextureReader.readTexture( filename ); } catch( IOException e ) { System.out.println(e); e.printStackTrace(); throw new RuntimeException(e); } return texture; } // SE CARGAN LOS DATOS DE LA TEXTURA A openGL private void CargarTexturaAOpenGL(GL gl, GLU glu, TextureReader.Texture texture, int target ) { if( true ) //if ( buildMipmaps ) { // Create texture with all mipmap levels. glu.gluBuild2DMipmaps( target, GL.GL_RGB8, texture.getWidth(), texture.getHeight(), GL.GL_RGB, GL.GL_UNSIGNED_BYTE, texture.getPixels() ); // GL.GL_RGB8 -FORMATO INTERNO GL.GL_RGB -FORMATO EXTERNO DESDE LA IMAGEN // texture.getPixels() -DATOS DE LA IMAGEN } else { gl.glTexImage2D( target, 0, GL.GL_RGBA, texture.getWidth(), texture.getHeight(), 0, GL.GL_RGB, GL.GL_UNSIGNED_BYTE, texture.getPixels() ); } } private void FijarParametrosDeTextura( GL gl ) { // if( enableHardwareAcceleratedMipmaps ) if( false ) { gl.glTexParameterf( GL.GL_TEXTURE_2D, GL.GL_GENERATE_MIPMAP, GL.GL_TRUE ); } // MAPA DE LA TEXTURA gl.glTexParameteri( GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST ); if ( true ) //if( enableMipmapping ) { gl.glTexParameteri( GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST_MIPMAP_NEAREST ); } else { gl.glTexParameteri( GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST ); } gl.glTexParameterf( GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_REPEAT ); gl.glTexParameterf( GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT ); // SE HABILITA anisotropic if( gl.isExtensionAvailable("GL_EXT_texture_filter_anisotropic") ) { float max[] = new float[1]; gl.glGetFloatv( GL.GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, max, 0 ); System.out.println("GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = "+max[0]); //ddd gl.glTexParameterf( GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAX_ANISOTROPY_EXT, max[0] ); } } }