Textur in openGL
-
Hallo zusammen!
Ich möchte in openGL eine Textur auf meine erstellte Heightmap anwenden. Soweit funktioniert das auch schon, wenn beide Bilder (Heightmap-Bild und Textur-Bild) die gleiche Größe haben. Sobald die Größe der jpg-Bilder aber unterschiedlich ist, wird die Textur einfach nicht mehr auf meine Heightmap angewandt. Es kommt dabei keine Fehlermeldung. Gibt es einen Befehl, der die Texturen irgendwie normalisiert, sodass die Größe egal ist?
Ich "texture" meine Heightmap für jedes Pixel mit
glTexCoord2f()
.
Die Initialisierung sieht folgendermaßen aus:
glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glGenTextures(1, &texName); //generate texture name glBindTexture(GL_TEXTURE_2D, texName); //bind texture 'texname' to target 'GL_TEXTURE_2D' Image *texImage = imageNew(); imageLoadFlip( texname, texImage ); if (imageWidth( texImage ) != imageHeight( texImage )) { printf("ERROR: Texture \"%s\" is not square!\n",texname); exit(1); } glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); //set texture parametres glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); gluBuild2DMipmaps( GL_TEXTURE_2D, 3, size, size, GL_RGB, GL_UNSIGNED_BYTE, texImage ); //load texture into graphics (texture) memory: glTexImage2D( GL_TEXTURE_2D, 0, //level imageNumChannels( texImage ), imageWidth( texImage ), imageHeight( texImage ), 0, //border GL_RGB, //format GL_UNSIGNED_BYTE, //pixel type imageData( texImage ) ); //the data glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); //set texture environment parameters glLightfv( GL_LIGHT0, GL_POSITION, lightPos ); glDisable(GL_TEXTURE_GEN_S); glDisable(GL_TEXTURE_GEN_T); glDisable(GL_TEXTURE_GEN_R); glEnable(GL_TEXTURE_2D); glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_AUTO_NORMAL); glEnable(GL_NORMALIZE); glFrontFace(GL_CW); //Specifies the orientation of front-facing polygons glCullFace(GL_FRONT); //Specifies whether frontfacing or backfacing facets may be culled imageDestroy( texImage );
-
Texturkoordinaten sind bereits unabhaengig von der Texturgroesse.
Woher kommt "size" bei gluBuild2DMipMaps?
Als Adresse muss imageData(texImage) uebergeben werden.
Danach Mip-Level 0 per glTexImage2D nochmal zu schreiben macht keinen Sinn.
-
Danke! Das Problem ist gelöst. Es lag an dem "size". Der Wert war von der Heightmap und nicht von der Textur.