Dans mon prochain projet, j'essaie d'apprendre JOGL. Le résultat devrait être une simple animation 2D.Taille de la texture lors de l'utilisation de JOGL
J'ai entendu dire qu'une texture doit avoir une taille de 2^n * 2^n. Puis-je toujours utiliser des images qui n'ont pas cette taille, ou dois-je éditer toutes les images à l'avance? De quoi dois-je m'occuper quand j'utilise de telles textures? Par exemple, je veux montrer une sorte de barre de progression, dont l'image est à la taille de 1024 * 96px. Dois-je définir un quad (par exemple 1024 * 1024 en taille si vous calculez les pixels) et utiliser l'alpha blending pour afficher uniquement la partie "remplie"? Ou sont la texture coordonne le chemin à parcourir?
[Modifier] Works, solution ressemble à ceci (en utilisant la projection orthogonale):
@Override
public void init(GLAutoDrawable drawable) {
GL gl = drawable.getGL(); // get GL
glu = new GLU();
//...
t = load(".\\TEXTURES\\ProgressBarBG.png");
//...
}
public Texture load(String fileName){
Texture text = null;
try{
text = TextureIO.newTexture(new File(fileName), false);
text.setTexParameteri(GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);
text.setTexParameteri(GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
}catch(Exception e){
System.out.println(e.getMessage());
System.out.println("Error loading texture " + fileName);
}
return text;
}
private void drawProgressBG(GL gl, int z) {
gl.glPushMatrix();
gl.glLoadIdentity();
gl.glEnable(GL.GL_BLEND);
gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL.GL_ALPHA_TEST);
gl.glAlphaFunc(GL.GL_GREATER, 0); // only render if alpha > 0
// don't show source alpha parts in the destination
gl.glEnable(GL.GL_TEXTURE_2D);
TextureCoords tc = t.getImageTexCoords();
t.enable();
t.bind();
gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE,
GL.GL_REPLACE);
gl.glBegin(GL.GL_QUADS);
gl.glTexCoord2f(tc.left(), tc.bottom()); gl.glVertex3f(0f, 0f, z);
gl.glTexCoord2f(tc.right(), tc.bottom()); gl.glVertex3f(1024f, 0f, z);
gl.glTexCoord2f(tc.right(), tc.top()); gl.glVertex3f(1024f, 96f, z);
gl.glTexCoord2f(tc.left(), tc.top()); gl.glVertex3f(0f, 96f, z);
gl.glEnd();
gl.glDisable(GL.GL_TEXTURE_2D);
// switch back to modulation of quad colours and texture
gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE,
GL.GL_MODULATE);
gl.glDisable(GL.GL_ALPHA); // switch off transparency
gl.glDisable(GL.GL_BLEND);
gl.glPopMatrix();
}
[/ EDIT]
Oui, à mon avis c'est une vraie perte de RAM (et HDD) - Voilà pourquoi j'ai posé cette question :) - Je vais jeter un oeil à votre lien – Elvith
Je l'ai eu en utilisant la texture px 1024x96 - thx! En plus de votre lien, j'ai trouvé celui-ci très utile: http://fivedots.coe.psu.ac.th/~ad/jg2/ch16/jogl2.pdf – Elvith