c++ - Saving a specific Camera View in OpenGL as Image -
i have 3d scene object , save view of object different 1 of current screen at. thought i'd have (pseudo code):
pushmatrix() loadidentity() translateandrotate() gluperspective() setviewport() drawscene() savescreenshot() popmatrix()
but picture of current view of camera, not 1 specified. did forget something?
edit: because of answer below, tried following code:
void scenephotograph(glubyte* target, float *translation, float rotationaroundy) { glmatrixmode(gl_projection); gluperspective(54.0f, (glfloat)openglcontrol1->width / (glfloat)openglcontrol1->height, 1.0f, 3000.0f); glviewport(0,0,openglcontrol1->width, openglcontrol1->height); glmatrixmode(gl_modelview); glclear(gl_color_buffer_bit | gl_depth_buffer_bit); glloadidentity(); gltranslatef(translation[0],translation[1],translation[2]); glrotatef(rotationaroundy, 0,1,0); openglcontrol1_ondrawgl(null,system::eventargs::empty); openglcontrol1->refresh(); glreadpixels(0, 0, openglcontrol1->width, openglcontrol1->height, gl_rgb, gl_unsigned_byte, target); glclear(gl_color_buffer_bit | gl_depth_buffer_bit); glloadidentity(); cam->setview(); openglcontrol1_ondrawgl(null,system::eventargs::empty); openglcontrol1->refresh(); glutswapbuffers(); }
that giving me access violation @ glutswapbuffers(); ideas?
first, make sure not mixing diferent matrix in code. screenshot, need position camera view on sccreen, but, before swap buffers, read pixels current framebuffer , store image.
so, need this:
glmatrixmode(gl_projection); gluperspective(); glmatrixmode(gl_modelview); glclear(); // clear buffers here loadidendity(); setcameraposition(); translaterotate(); drawscene(); screenshot(); // again set camera correct position glclear(); // clear buffers here loadidendity(); setcameraposition(); translaterotate(); drawscene(); swapbuffers();
as can see, screenshot take care of reading pixels current framebuffer , save image. again position camera correct place
Comments
Post a Comment