openGLでレンダリングしてレンダリングした画像をキャプチャしたいと思います。glReadPixelsを使用してから、CImgで画像を保存します。残念ながら、結果は間違っています。下記参照。左の画像は正しいです。GadWinPrintScreenでキャプチャしました。右の画像は正しくありません。glReadPixelsとCImgで作成しました。
私は何が間違っているのかについて多くのWeb調査を行ってきましたが、私は追求する道がありません。ここに、画像をキャプチャするコードがあります。
void snapshot() {
int width = glutGet(GLUT_WINDOW_WIDTH);
int height = glutGet(GLUT_WINDOW_HEIGHT);
glPixelStorei(GL_PACK_ROW_LENGTH, 0);
glPixelStorei(GL_PACK_SKIP_PIXELS, 0);
glPixelStorei(GL_PACK_SKIP_ROWS, 0);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
int bytes = width*height*3; //Color space is RGB
GLubyte *buffer = (GLubyte *)malloc(bytes);
glFinish();
glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, buffer);
glFinish();
CImg<GLubyte> img(buffer,width,height,1,3,false);
img.save("ScreenShot.ppm");
exit(0);
}
ここで、スナップショットメソッドを呼び出します。
void display(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
drawIndividual(0);
snapshot();
glutSwapBuffers();
}
コメントのフォローアップとして、ビット深度を取得してコンソールに出力しました。結果は次のとおりです。
redbits=8
greenbits=8
bluebits=8
depthbits=24