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. 🙂


Anmelden zum Antworten