gpt4 book ai didi

c++ - 使用 glDrawPixels 时将图片上下颠倒

转载 作者:搜寻专家 更新时间:2023-10-30 23:59:35 25 4
gpt4 key购买 nike

将 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 导致与整数版本相同的结果)。

我在这里做错了什么?屏幕宽度 = 320,屏幕高度 = 240。

最佳答案

这对我有用:

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();
}

关于c++ - 使用 glDrawPixels 时将图片上下颠倒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15871616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com