glTexCoord2f();



  • Hey,
    als ich habe eine Frage im Bezug auf glTexCoord2f().
    Wie ich eine ganze Textur auf ein Objekt lade ist kein Problem. Nur ich möchte das jetzt so gestalten das ich nur einen Ausschnitt anzeige und sobald man auf das Objekt klickt wird das langsam größer. Wie ich das größer mache ist kein Problem. Nur mit dem Ausschnitt habe ich so meine Probleme.

    Wenn ich das ganze Bild lade, dann schreibe ich einfach diesen Code:

    texObj->bind();
    	glBegin(GL_QUADS);
    		glTexCoord2f(0,1); glVertex2f(-size.X,-size.Y);
    		glTexCoord2f(0,0); glVertex2f(-size.X,size.Y);
    		glTexCoord2f(1,0); glVertex2f(size.X,size.Y);
    		glTexCoord2f(1,1); glVertex2f(size.X,-size.Y);
    	glEnd();
    	texObj->unbind();
    

    wenn ich dann jetzt nur einen Ausschnitt anzeige, muss ich ja nur anstatt der 1 einen kleinen Wert schreiben (0.23) oder so. Das klappt auch nur sobald ich nicht bei jeder 1 den gleichen Wert hinschreibe, dann verzieht er das gesamte Bild.

    Bei diesem Coder macht er gar nichts richtig (Beispiel-Code)

    texObj->bind();
    	glBegin(GL_QUADS);
    		glTexCoord2f(0,0.23); glVertex2f(-size.X,-size.Y);
    		glTexCoord2f(0,0); glVertex2f(-size.X,size.Y);
    		glTexCoord2f(0.1,0); glVertex2f(size.X,size.Y);
    		glTexCoord2f(0.57,0.57); glVertex2f(size.X,-size.Y);
    	glEnd();
    	texObj->unbind();
    

    Wenn ich diesen Code schreibe, dann macht er überalle die gleichen Abstand was er aber nicht machen soll.

    texObj->bind();
    	glBegin(GL_QUADS);
    		glTexCoord2f(0,0.5); glVertex2f(-size.X,-size.Y);
    		glTexCoord2f(0,0); glVertex2f(-size.X,size.Y);
    		glTexCoord2f(0.5,0); glVertex2f(size.X,size.Y);
    		glTexCoord2f(0.5,0.5); glVertex2f(size.X,-size.Y);
    	glEnd();
    	texObj->unbind();
    

    Mein Bild soll wie folgt geschnitten werden:
    Ich habe ein Bild von z.B. 10cm Breite. Davon möchte ich aber nur die ersten 5cm angezeigt bekommen.
    Dann ist das Bild noch 20cm Hoch. Davon möchte ich nur die ersten 4cm anzeigen lassen. Nur ich habe jetzt keine Ahnung wie ich diese Unterschiedlichen Maße darauf übertragen kann. ich weiß auch nicht welches glTexCoord2f() für welchen Bereich des Bildes verantworlich ist.

    Hat jemand eine Ahnung?



  • #define EIN_CM 100 //Pixel
    #define X 0 
    #define Y 1
    float Texturkoordinaten[4][2];
    
    void BerechneTexturKoordinaten(int Pixel_x,int Pixel_y,int cm_x,int cm_y)
    {
    //untere linke Ecke
    Texturkoordinaten[0][X] = 0;
    Texturkoordinaten[0][Y] = 0;
    //obere linke Ecke
    Texturkoordinaten[1][X] = 0;
    Texturkoordinaten[1][Y] = (1.0f/ Pixel_y)*cm_y;;
    //obere rechte Ecke
    Texturkoordinaten[2][X] = (1.0f/ Pixel_x)*cm_x;
    Texturkoordinaten[2][Y] = (1.0f/ Pixel_y)*cm_y;
    //untere rechte Ecke
    Texturkoordinaten[3][X] = (1.0f/ Pixel_x)*cm_x;
    Texturkoordinaten[3][Y] = 0;
    };
    
    glBegin(GL_QUADS);
            glTexCoord2f(Texturkoordinaten[0][X],Texturkoordinaten[0][Y]);
            //...
            glTexCoord2f(Texturkoordinaten[3][X],Texturkoordinaten[3][Y]);
            //...
            glTexCoord2f(Texturkoordinaten[2][X],Texturkoordinaten[2][Y]);
            //...
            glTexCoord2f(Texturkoordinaten[1][X],Texturkoordinaten[1][Y]);
            //...
    

    Mit EIN_CM kannst du festlegen wieviel Pixel 1cm hat;
    ⚠ Hoffentlich geht das mit dem Code. Ich konnte es selbst nicht auspronbieren!



  • Danke! Mit was für Daten soll ich denn die Funktion aufrufen also Pixel_x Pixel_y cm_x cm_y?



  • oh sorry 🙄

    so ist's richtig:

    void BerechneTexturKoordinaten(int Pixel_x, // wieviel Pixel hat eine Zeile der Textur?
                                   int Pixel_y, // wieviel Pixel hat eine Spalte der Textur
                                   int cm_x, // Breite in CM(von link aus)
                                   int cm_y // Höhe in CM(von unten aus)
                                   )
    {
    //untere linke Ecke
    Texturkoordinaten[0][X] = 0;
    Texturkoordinaten[0][Y] = 0;
    //obere linke Ecke
    Texturkoordinaten[1][X] = 0;
    Texturkoordinaten[1][Y] = (1.0f/ Pixel_y)*EIN_CM*cm_y;;
    //obere rechte Ecke
    Texturkoordinaten[2][X] = (1.0f/ Pixel_x)*EIN_CM*cm_x;
    Texturkoordinaten[2][Y] = (1.0f/ Pixel_y)*EIN_CM*cm_y;
    //untere rechte Ecke
    Texturkoordinaten[3][X] = (1.0f/ Pixel_x)*EIN_CM*cm_x;
    Texturkoordinaten[3][Y] = 0;
    };
    


  • also mit den cm ist ja kein problem aber wie bekomme ich die pixel pro spalte und zeile heraus? also was meinst du damit?



  • Ein Foto ist 500x 250 Pixel groß.
    Du willst ein 2 cm großes Quadrat ausschneiden:

    BerechneTexturkoordinaten(500,250,2,2);
    


  • ich bin echt doof. Ja kla ich weiß natürlich was mit Pixel gemeint ist^^.
    Öhm also ich habe den Code ausprobiert. Es gibt nur Probleme mit den cm also ich muss die Breite und Höhe in Pixel angeben und nicht in cm.
    Dann liegt das Problem wohl da drinne, das er das einfach nicht umrechnet.

    Ein Problem habe ich da aber noch. Ich habe auch ein Bild wo ich nur die Überschrift anzeigen möchte. Diese befindet sich genau in der Mitte. Damit die aber nicht total verzogen ist, müsste ich links und rechts von der Überschrift was abschneiden. Wüsstest du da noch eine Möglichkeit?



  • Du willst also die Überschrift "ausschneiden" oder?



  • Jau genau.



  • einfach mit glTexCoord2f() die entsprechende Koordinaten der Textur auslesen.

    Obere rechte Ecke: (1,1)
    Untere linke Ecke: (0,0)


Log in to reply