Necesito escalar el resultado de la imagen glDrawPixels.Cómo escalar glDrawPixels?
Estoy dibujando un búfer de imagen de 640x480 píxeles con glDrawPixels en un Qt QGLWidget.
He probado a hacer lo siguiente en PaintGL:
glScalef(windowWidth/640, windowHeight/480, 0);
glDrawPixels(640,480,GL_RGB,GL_UNSIGNED_BYTE,frame);
Pero no funciona.
estoy fijando la ventana gráfica OpenGL y glOrtho con el tamaño del widget como:
void WdtRGB::paintGL() {
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Setup the OpenGL viewpoint
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, windowWidth, windowHeight, 0, -1.0, 1.0);
glDepthMask(0);
//glRasterPos2i(0, 0);
glScalef(windowWidth/640, windowHeight/480, 0);
glDrawPixels(640,480,GL_RGB,GL_UNSIGNED_BYTE,frame);
}
//where windowWidth and windowHeight corresponds to the widget size.
/the init functions are:
void WdtRGB::initializeGL() {
glClearColor (0.8, 0.8, 0.8, 0.0); // Background to a grey tone
/* initialize viewing values */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, windowWidth, windowHeight, 0, -1.0, 1.0);
glEnable (GL_DEPTH_TEST);
}
void WdtRGB::resizeGL(int w, int h) {
float aspect=(float)w/(float)h;
windowWidth = w;
windowHeight = h;
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
if(w <= h)
glOrtho (-5.0, 5.0, -5.0/aspect, 5.0/aspect, -5.0, 5.0);
else
glOrtho (-5.0*aspect, 5.0*aspect, -5.0, 5.0, -5.0, 5.0);
//printf("\nresize");
emit changeSize ();
}
Muchas gracias muuch, estoy comprobando ahora mismo – Herman
me pareció que necesitaba un glEnable/glDisable (GL_TEXTURE_RECTANGLE) par alrededor del comienzo/final para obtener la textura aplicada a los cuatriciclos, y que necesitaba usar GL_TEXTURE_RECTANGLE sin el _EXT, pero esto también funcionó perfectamente para mí también, ¡gracias! : D –