gpt4 book ai didi

opengl - 使用 DevIL 或 SOIL 保存 openGL 输出

转载 作者:行者123 更新时间:2023-12-02 01:10:58 26 4
gpt4 key购买 nike

我试过同时使用土壤和魔鬼图像库,但创建的屏幕截图完全是黑色图像。对于魔鬼,我使用了在这里找到的函数 Take screenshot with openGL and save it as png但图像仍然是黑屏。

关于保存屏幕截图或导出 opengl 输出有什么想法吗?

最佳答案

试试这个:

#include <vector>
#include <GL/glut.h>
#include <SOIL/SOIL.h>

using namespace std;

bool save = false;
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( -2, 2, -2, 2, -1, 1);

glMatrixMode( GL_MODELVIEW );
glLoadIdentity();

glColor3ub( 255, 0, 0 );
glBegin( GL_QUADS );
glVertex2i( -1, -1 );
glVertex2i( 1, -1 );
glVertex2i( 1, 1 );
glVertex2i( -1, 1 );
glEnd();

if( save )
{
int w = glutGet( GLUT_WINDOW_WIDTH );
int h = glutGet( GLUT_WINDOW_HEIGHT );
vector< unsigned char > buf( w * h * 3 );

glPixelStorei( GL_PACK_ALIGNMENT, 1 );
glReadPixels( 0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE, &buf[0] );

int err = SOIL_save_image
(
"img.bmp",
SOIL_SAVE_TYPE_BMP,
w, h, 3,
&buf[0]
);

save = false;
}

glutSwapBuffers();
}

void keyboard( unsigned char key, int x, int y )
{
if( key == 's' )
{
save = true;
glutPostRedisplay();
}
}

int main( int argc, char **argv )
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
glutInitWindowSize( 640, 480 );
glutCreateWindow( "GLUT" );
glutDisplayFunc( display );
glutKeyboardFunc( keyboard );
glutMainLoop();
return 0;
}

关于opengl - 使用 DevIL 或 SOIL 保存 openGL 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17370828/

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