Question

Je suis relativement nouveau à OpenGL et j'ai quelques questions quand je suis rendu une image comme une texture pour un QUAD qui est aussi la même taille de l'image. Voici mon code. Je serais très reconnaissant si quelqu'un me aide à résoudre ce problème. L'image apparaît ainsi plus petite et ratatinée. (BTW, les dimensions de l'image sont 500x375).

glGenTextures( 1, &S_GLator_InputFrameTextureIDSu );
        glBindTexture(GL_TEXTURE_2D, S_GLator_InputFrameTextureIDSu);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

        glTexImage2D( GL_TEXTURE_2D, 0, 4, S_GLator_EffectCommonData.mRenderBufferWidthSu, S_GLator_EffectCommonData.mRenderBufferHeightSu, 0, GL_RGBA, GL_UNSIGNED_BYTE, dataP);
glBindTexture(GL_TEXTURE_2D, S_GLator_InputFrameTextureIDSu);
        glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, S_GLator_EffectCommonData.mRenderBufferWidthSu, S_GLator_EffectCommonData.mRenderBufferHeightSu, GL_RGBA, GL_UNSIGNED_BYTE, bufferP);
//set the matrix modes
        glMatrixMode( GL_PROJECTION );
        glLoadIdentity();
        //gluPerspective( 45.0, (GLdouble)widthL / heightL, 0.1, 100.0 );
        glOrtho (0, 1, 0, 1, -1, 1);
        // Set up the frame-buffer object just like a window.
        glViewport( 0, 0, widthL, heightL );
        glDisable(GL_DEPTH_TEST);
        glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );


        glMatrixMode( GL_MODELVIEW );
        glLoadIdentity();


        glBindTexture( GL_TEXTURE_2D, S_GLator_InputFrameTextureIDSu );


        //Render the geometry to the frame-buffer object


        glBegin(GL_QUADS); //input frame
            glColor4f(1.f,1.f,1.f,1.f);
            glTexCoord2f(0.0f,0.0f);    
            glVertex3f(0.f ,0.f ,0.0f);
            glTexCoord2f(1.0f,0.0f);    
            glVertex3f(1.f ,0.f,0.0f);
            glTexCoord2f(1.0f,1.f); 
            glVertex3f(1.f ,1.f,0.0f);
            glTexCoord2f(0.0f,1.f); 
            glVertex3f(0.f ,1.f,0.0f);
        glEnd();
Était-ce utile?

La solution

Tout d'abord, vos dimensions de l'image doivent être des puissances de deux, pas seulement 500x375 arbitraire. En second lieu, l'argument internalformat (troisième) à glTexImage2D doit être une constante symbolique, décrivant la mise en page de format interne, non seulement "4", comme il est dépréciée depuis OpenGL 1.2. Troisièmement, votre mise en page de stockage dataP et bufferP doit correspondre à la GL_UNPACK_ALIGNMENT actuelle. Quatrièmement, votre quad équilatéral, sur lequel vous essayez de mettre la texture sur, est essentiellement carré, et donc votre texture non carré apparaît écrasée ou allongée avec une telle coordonnées de texture.

Autres conseils

Je pense que je vois que vous émettez ici. glViewport définit la taille de la fenêtre, et non la taille de la fenêtre. Donc, lorsque vous créez votre fenêtre (avec surabondance, sdl ou wgl, ou autre), vous devez spécifier la taille. Pour obtenir un mappage 1: 1 de la glViewport à cette fenêtre, les deux doivent correspondre

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top