Textur
Børre Stenseth
Forklaring av>Teksturer>GL4Java

Tekstur i GL4Java

Hva
Hvordan ulike bildeformater klargjøres som teksturer i GL4Java

GL4Java har teksturloadere for flere ulike bilde formater:

TextureLoader texLoader = new AWTTextureLoader(this, gl, glu);
Brukes til å laste ".gif", ".jpg" og mulige andre bildeformater

TextureLoader texLoader = new TGATextureLoader(gl, glu);
Brukes til å laste ".tga" bildeformatet.

TextureLoader texLoader = new PngTextureLoader(gl, glu);
Brukes til å laste ".png" bildeformatet.

Det første du må gjøre er å lage en array for texturen:

int []texName = new int[1];

Deretter må du, før du tegner det du skal ha tekstur på, enable teksturer:

gl.glEnable(GL_TEXTURE_2D);

I metoden der jeg tegner det objektet som skal ha tekstur, spesifiserer jeg først filnavnet, deretter kaller jeg metoden "textures", som laster bildet og lager teksturen. (Denne metoden er beskrevet litt lenger ned på siden). Deretter spesifiserer jeg hvordan teksturen skal legges på dette objektet.

String filnavn="vann.png";

//kaller teksturmetoden, for å loade bildet
textures(filnavn);

//Hvordan teksturen skal legges på
gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
gl.glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);

//modulate her for at lyset skal få noen effekt når det er tekstur
gl.glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

//koordinatene til teksturen
float textPoints[]=
{
0.0f, 0.0f,
0.0f, 1.0f,
1.0f, 0.0f,
1.0f, 1.0f,
};
//gjør klar for å legge ut tekstur
gl.glMap2f(GL_MAP2_TEXTURE_COORD_2,
0,1,2,2,
0,1,4,2,textPoints);
gl.glEnable(GL_MAP2_TEXTURE_COORD_2);

Og her er metoden textures, som altså laster bildet og lager teksturen.:

public void textures(String filnavn) {

//Laster inn bildet
PngTextureLoader txtLoader = new PngTextureLoader(gl, glu);
txtLoader.readTexture(filnavn);

//Hvis det går greit å laste inn bildet så..
if(txtLoader.isOk()) {

//Genererer en tekstur
gl.glGenTextures(1,texName);
gl.glBindTexture(GL_TEXTURE_2D,texName[0]);

//Lager teksturen og gir informasjon om bildet.
gl.glTexImage2D(GL_TEXTURE_2D,
	0,
	3,
	txtLoader.getImageWidth(),
	txtLoader.getImageHeight(),
	0,
	GL_RGB,
	GL_UNSIGNED_BYTE,
	txtLoader.getTexture());
}

Tilslutt må du skru av teksturer igjen, før du skal tegne noe nytt som ikke skal ha samme tekstur, eller som ikke skal ha tekstur i det hele tatt:

gl.glDisable(GL_TEXTURE_2D);
Referanser
Vedlikehold
August 2002. Basert på Modulen Flaske
(Velkommen) Forklaring av>Teksturer>GL4Java (Modell til skjerm)