Les textures avec JOGL

Tout d'abord, il est impératif que vos images servant de texture soient d'une taille puissance de 2 (ex. : 64×64)

Un peu de code en vrac

Une classe pour charger vos textures :

import java.io.File;
import java.io.IOException;
 
import javax.media.opengl.GL;
import javax.media.opengl.GLException;
 
import com.sun.opengl.util.texture.Texture;
import com.sun.opengl.util.texture.TextureIO;
 
public class TextureHelper
{
	public static Texture getTexture(String file)
	{
		Texture t = null;
		try
		{
			t = TextureIO.newTexture(new File(file), false);
			t.setTexParameteri(GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);
			t.setTexParameteri(GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
 
		} catch (GLException e)
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		}
		return t;
	}
 
}

Pour charger votre texture :

	public void init(GLAutoDrawable drawable)
	{
		GL gl = drawable.getGL();
 
		gl.glClearColor(1f, 1f, 1f, 1f);
		gl.glEnable(GL.GL_BLEND);
		gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
		gl.glEnable(GL.GL_LINE_SMOOTH);
		gl.glEnable(GL.GL_DEPTH_TEST); // Z buffer
		gl.glEnable(GL.GL_LIGHTING); // Activer la lumiere
		gl.glPolygonMode(GL.GL_FRONT_AND_BACK, GL.GL_FILL);
		gl.glEnable(GL.GL_NORMALIZE); /* normalisation des vecteurs (lors de mises a l'echelle) */
		gl.glClearDepth(255);
                gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); 
 
                ecranTex = TextureHelper.getTexture("ubuntu.png");
 
                gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
                gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
                [...]

Pour appliquer une texture sur un GL_QUADS :

	public static int construireEcran(GL gl, Texture t)
	{
		int i;
		GLUT glut = new GLUT();
		i = gl.glGenLists(1);
 
		gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_REPLACE);
 
		gl.glNewList(i, GL.GL_COMPILE);
		// Ecran
		gl.glPushMatrix();
		t.enable();
		TextureCoords tc = t.getImageTexCoords();
		t.bind();
		gl.glTranslatef(0, 94, -20);
		gl.glScalef(38, 40, 7);
		glut.glutSolidCube(1);
		gl.glBegin(GL.GL_QUADS);
		gl.glTexCoord2f(tc.top(), tc.left());
		gl.glVertex3f(-0.5f, 0.5f, 0.505f);
		gl.glTexCoord2f(tc.top(), tc.right());
		gl.glVertex3f(0.5f, 0.5f, 0.505f);
		gl.glTexCoord2f(tc.bottom(), tc.right());
		gl.glVertex3f(0.5f, -0.5f, 0.505f);
		gl.glTexCoord2f(tc.bottom(), tc.left());
		gl.glVertex3f(-0.5f, -0.5f, 0.505f);
		gl.glEnd();
		t.disable();
		gl.glPopMatrix();
		gl.glEndList();
		return i;
	}

Ce code montre également comment superposer un GL_QUADS texturé sur un SolidCube.

Il ne reste plus qu'à construire votre objet comme suit :

ecran = ClassRoomElement.construireEcran(gl, this.ecranTex);
 
java/jogl/texture.txt · Dernière modification: 2008/08/13 13:56 (édition externe)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki