void arglDispImage(ARUint8 *image, const ARParam *cparam, const double zoom, ARGL_CONTEXT_SETTINGS_REF contextSettings) { GLint texEnvModeSave; GLboolean lightingSave; GLboolean depthTestSave; #ifdef ARGL_DEBUG GLenum err; const GLubyte *errs; #endif // ARGL_DEBUG if (!image) return; // Prepare an orthographic projection, set camera position for 2D drawing, and save GL state. glGetTexEnviv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, &texEnvModeSave); // Save GL texture environment mode. if (texEnvModeSave != GL_REPLACE) glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); lightingSave = glIsEnabled(GL_LIGHTING); // Save enabled state of lighting. if (lightingSave == GL_TRUE) glDisable(GL_LIGHTING); depthTestSave = glIsEnabled(GL_DEPTH_TEST); // Save enabled state of depth test. if (depthTestSave == GL_TRUE) glDisable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluOrtho2D(0, cparam->xsize, 0, cparam->ysize); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); if (arDebug) { // Globals from ar.h: arDebug, arImage, arImageProcMode. if (arImage) { if (arImageProcMode == AR_IMAGE_PROC_IN_HALF) { ARParam cparamScaled = *cparam; cparamScaled.xsize /= 2; cparamScaled.ysize /= 2; arglDispImageStateful(arImage, &cparamScaled, zoom * 2.0, contextSettings); } else { arglDispImageStateful(arImage, cparam, zoom, contextSettings); } } } else { arglDispImageStateful(image, cparam, zoom, contextSettings); } // Restore previous projection, camera position, and GL state. glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); if (depthTestSave == GL_TRUE) glEnable(GL_DEPTH_TEST); // Restore enabled state of depth test. if (lightingSave == GL_TRUE) glEnable(GL_LIGHTING); // Restore enabled state of lighting. if (texEnvModeSave != GL_REPLACE) glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, texEnvModeSave); // Restore GL texture environment mode. #ifdef ARGL_DEBUG // Report any errors we generated. while ((err = glGetError()) != GL_NO_ERROR) { errs = gluErrorString(err); // fetch error code fprintf(stderr, "GL error: %s (%i)\n", errs, (int)err); // write err code and number to stderr } #endif // ARGL_DEBUG }
/** * GLNyARRaster_RGBをバックグラウンドに書き出す。 * @param image * @param zoom */ void NyARGLUtil::drawBackGround(const NyARToolkitCPP::INyARRgbRaster& i_raster, double i_zoom) { GLboolean lightingSave; GLboolean depthTestSave; GLint texEnvModeSave; const NyARToolkitCPP::TNyARIntSize& rsize=i_raster.getSize(); // Prepare an orthographic projection, set camera position for 2D drawing, and save GL state. glGetTexEnviv(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,&texEnvModeSave); // Save GL texture environment mode. if (texEnvModeSave != GL_REPLACE) { glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); } lightingSave = glIsEnabled(GL_LIGHTING); // Save enabled state of lighting. if (lightingSave == GL_TRUE) { glDisable(GL_LIGHTING); } depthTestSave = glIsEnabled(GL_DEPTH_TEST); // Save enabled state of depth test. if (depthTestSave == GL_TRUE) { glDisable(GL_DEPTH_TEST); } glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluOrtho2D(0.0,rsize.w, 0.0,rsize.h); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); arglDispImageStateful(i_raster, i_zoom); // Restore previous projection, camera position, and GL state. glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); if (depthTestSave) { glEnable(GL_DEPTH_TEST); // Restore enabled state of depth test. } if (lightingSave) { glEnable(GL_LIGHTING); // Restore enabled state of lighting. } if (texEnvModeSave != GL_REPLACE) { glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,texEnvModeSave); // Restore GL texture environment mode. } glEnd(); }
// // This function is called when the window needs redrawing. // static void Display(void) { ARdouble p[16]; ARdouble m[16]; double zoom; // Select correct buffer for this context. glDrawBuffer(GL_BACK); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear the buffers for new frame. arglPixelBufferDataUpload(gArglSettings, gARTImage); arglDispImage(gArglSettings); gARTImage = NULL; // Invalidate image data. // Projection transformation. arglCameraFrustumRH(&(gCparamLT->param), VIEW_DISTANCE_MIN, VIEW_DISTANCE_MAX, p); glMatrixMode(GL_PROJECTION); #ifdef ARDOUBLE_IS_FLOAT glLoadMatrixf(p); #else glLoadMatrixd(p); #endif glMatrixMode(GL_MODELVIEW); glEnable(GL_DEPTH_TEST); // Viewing transformation. glLoadIdentity(); // Lighting and geometry that moves with the camera should go here. // (I.e. must be specified before viewing transformations.) //none if (gPatt_found) { // Calculate the camera position relative to the marker. // Replace VIEW_SCALEFACTOR with 1.0 to make one drawing unit equal to 1.0 ARToolKit units (usually millimeters). arglCameraViewRH(gPatt_trans, m, VIEW_SCALEFACTOR); #ifdef ARDOUBLE_IS_FLOAT glLoadMatrixf(m); #else glLoadMatrixd(m); #endif // All lighting and geometry to be drawn relative to the marker goes here. // Draw the movie frame. if (gMovieImage) { glPushMatrix(); glRotatef(90.0f, 1.0f, 0.0f, 0.0f); // Place movie in x-z plane instead of x-y plane. glTranslated(-gPatt_width*0.5, 0.0f, 0.0f); // Movie origin is at lower-left of movie frame. Place this at the edge of the marker . zoom = 1.0/gMovieCparam.xsize * gPatt_width; // Scale the movie frame so that it is the same width as the marker. arglPixelBufferDataUpload(gMovieArglSettings, gMovieImage); arglDispImageStateful(gMovieArglSettings); // Show the movie frame. glPopMatrix(); } } // gPatt_found // Any 2D overlays go here. glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, (GLdouble)windowWidth, 0, (GLdouble)windowHeight, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); // // Draw help text and mode. // if (gShowMode) { printMode(); } if (gShowHelp) { if (gShowHelp == 1) { printHelpKeys(); } } glutSwapBuffers(); }
void arglDispImage(ARUint8 *image, const ARParam *cparam, const double zoom, ARGL_CONTEXT_SETTINGS_REF contextSettings) { GLint texEnvModeSave; GLboolean lightingSave; GLboolean depthTestSave; #if ARGL_SUPPORT_DEBUG_MODE int arDebugMode = AR_DEBUG_DISABLE, arImageProcMode; #endif // ARGL_SUPPORT_DEBUG_MODE #ifdef ARGL_DEBUG GLenum err; const GLubyte *errs; #endif // ARGL_DEBUG if (!image || !cparam) return; // Prepare an orthographic projection, set camera position for 2D drawing, and save GL state. glGetTexEnviv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, &texEnvModeSave); // Save GL texture environment mode. if (texEnvModeSave != GL_REPLACE) glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); lightingSave = glIsEnabled(GL_LIGHTING); // Save enabled state of lighting. if (lightingSave == GL_TRUE) glDisable(GL_LIGHTING); depthTestSave = glIsEnabled(GL_DEPTH_TEST); // Save enabled state of depth test. if (depthTestSave == GL_TRUE) glDisable(GL_DEPTH_TEST); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); glOrtho(0, cparam->xsize, 0, cparam->ysize, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); #if ARGL_SUPPORT_DEBUG_MODE if (contextSettings->arhandle) arGetDebugMode(contextSettings->arhandle, &arDebugMode); if (arDebugMode == AR_DEBUG_ENABLE) { if (contextSettings->arhandle->labelInfo.bwImage) { arGetImageProcMode(contextSettings->arhandle, &arImageProcMode); if (arImageProcMode == AR_IMAGE_PROC_FIELD_IMAGE) { ARParam cparamScaled = *cparam; cparamScaled.xsize /= 2; cparamScaled.ysize /= 2; arglDispImageStateful(contextSettings->arhandle->labelInfo.bwImage, &cparamScaled, zoom * 2.0, contextSettings); } else { arglDispImageStateful(contextSettings->arhandle->labelInfo.bwImage, cparam, zoom, contextSettings); } } } else { #endif // ARGL_SUPPORT_DEBUG_MODE arglDispImageStateful(image, cparam, zoom, contextSettings); #if ARGL_SUPPORT_DEBUG_MODE } #endif // ARGL_SUPPORT_DEBUG_MODE // Restore previous projection, camera position, and GL state. glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); if (depthTestSave == GL_TRUE) glEnable(GL_DEPTH_TEST); // Restore enabled state of depth test. if (lightingSave == GL_TRUE) glEnable(GL_LIGHTING); // Restore enabled state of lighting. if (texEnvModeSave != GL_REPLACE) glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, texEnvModeSave); // Restore GL texture environment mode. #ifdef ARGL_DEBUG // Report any errors we generated. while ((err = glGetError()) != GL_NO_ERROR) { errs = gluErrorString(err); // fetch error code ARLOGe("GL error: %s (0x%04X)\n", errs, (int)err); // write err code and number to stderr } #endif // ARGL_DEBUG }