当我将glDrawPixels()与glRasterPos2*()和glPixelZoom()结合使用时,我得到了非常奇怪的结果。我有一张图片,我想像以前的帧缓冲区一样展示它,比如(0,0)在左上角。代码如下:
void GLWidget::resizeGL( int w, int h )
{
glViewport( 0, 0, w, h );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( 0, w, 0, h, -1, 1 );
}
void GLWidget::paintGL()
{
for( int i = 0; i < SCREEN_WIDTH; ++i )
{
displayBitmap[i] = 0xf81f;
}
for( int i = 239 * SCREEN_WIDTH; i < 239 * SCREEN_WIDTH + SCREEN_WIDTH; ++i )
{
displayBitmap[i] = 0xf800;
}
//glRasterPos2f( 0, SCREEN_HEIGHT - 0.1 );
glRasterPos2i( 0, SCREEN_HEIGHT - 1 );
glPixelZoom( 1, -1 );
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
glDrawPixels( SCREEN_WIDTH, SCREEN_HEIGHT, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, displayBitmap );
}如果像现在这样执行,我得到(0,1)处的紫线,即一条黑线,然后是紫线,然后,在不可见的底部区域,是红线。
好的,所以我改变了
glRasterPos2i( 0, SCREEN_HEIGHT - 1 );至
glRasterPos2i( 0, SCREEN_HEIGHT );不,输出已损坏。奇怪的是,如果我将其更改为:
glRasterPos2f( 0, SCREEN_HEIGHT - 0.1 );它以正确的顺序绘制两条线(SCREEN_HEIGHT和SCREEN_HEIGHT - 1.0产生与整数版本相同的结果)。
我到底做错了什么?SCREEN_WIDTH = 320,SCREEN_HEIGHT = 240。
发布于 2013-07-06 16:40:42
这对我来说很有效:
void display() {
unsigned char *pixels=captureScreenRegion(0,0,window_width,window_height);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glRasterPos2f(-1,1);
glPixelZoom( 1, -1 );
glDrawPixels(window_width,window_height,GL_RGB,GL_BYTE,pixels);
free(pixels);
glutSwapBuffers();
}发布于 2013-04-08 16:18:02
glDrawPixels在消费级硬件上的支持很差。在较新的OpenGL版本中,它已被完全删除。而不是花费时间尝试让它工作,只需加载您的图像到一个纹理,并绘制一个纹理四边形与一个简单的着色器与它。
相信我,摆弄glDrawPixels是不值得的。
发布于 2015-02-12 23:19:14
我遇到了和你一样的问题。我是这样解决的:
void VideoRenderWidget::resizeGL(int w, int h)
{
glViewport( 0, 0, w, h );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( 0, w, 0, h, 0.1, 1 );
glPixelZoom( 1, -1 );
glRasterPos3f(0, h - 1, -0.3);
}
void VideoRenderWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawPixels(704, 576, GL_RGB, GL_UNSIGNED_BYTE, buffer_.data_);
}这对我很有效..我还在开发这个..这里704是视频宽度,576是高度。
https://stackoverflow.com/questions/15871616
复制相似问题