Forklaring av>Teksturer>GL4Java
Tekstur i GL4Java
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);