Texture problème OpenGL 2D Cartographie
-
20-09-2019 - |
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();
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
.