亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? callbacks.cpp

?? tracciatore di mani con webcam
?? CPP
字號:
#include <stdio.h>#include <stdlib.h>#include <math.h>#include <GL/glut.h>#include <AR/ar.h>#include <AR/arMulti.h>#include <AR/video.h>#include <float.h>#include "gsub.h"#include "sdlut.h"#include "main.h"#include "callbacks.h"#include "drawing.h"#include "hv_ARtk_demo.h"using namespace std;#define KMOD_ALL	( KMOD_CTRL | KMOD_ALT | KMOD_SHIFT | KMOD_META )static const int SELECT_BUF_SIZE = 1024 * 10;//#define PROX_THRESH 135.0static const int MAX_NAME_STACK = 32;static const unsigned int NAME_END = UINT_MAX;static const int MOUSE_SQR_DIST_THRESH = 16;static const unsigned int MOUSE_TICKS_THRESH = 500;int DrawMode = RENDER_MODE;texture_info videoTex;static bool multiVisible = false;static bool mouse_moved = false;int mouse_x, mouse_y;bool show_markers = true;extern bool fixed_world;extern bool take_snapshots;extern bool fullsize_snapshots;unsigned char *framePixels = NULL;static GLUquadric *quadric = gluNewQuadric();static void selectDraw();bool render_select( int x, int y, int* selected,  		d3* selected_win, d3* selected_world);bool process_selection ( GLint hits, GLuint *buffer, int x, int y,			 int* selected,  			 d3* selected_win);void initObjs();//-------------------------------------------------------------------------// regular event callback functions//-------------------------------------------------------------------------void displayFunc(){  if (mouse_moved) {    mouse_moved = false;    // this in turn might call selectDraw()    hv_pointer_update(HV_PTR_SHOW, HV_PTR_NO_BUTTON_ACTION, 		      mouse_x, mouse_y);  }  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );  ARUint8 *dataPtr = NULL;  arVideoCapNext();  dataPtr = (ARUint8 *)arVideoGetImage();  if( dataPtr == NULL )    return;  hv_process_frame((char*)dataPtr, xsize, ysize);  if (take_snapshots && !fullsize_snapshots) {    hv_save_frame((char*) dataPtr, xsize, ysize, fullsize_snapshots);  }    makeTexture( dataPtr, 640, 480, &videoTex );  glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );  argDrawMode2D();  if( videopassthrough )    argDispImage( dataPtr, 0, 0 );  if (fixed_world) {    // show whereever it was last    hv_set_anchor_transform(true, NULL);  }    // find makers  ARMarkerInfo *found;  int found_num;    // detect markers in the scene  if( arDetectMarker( dataPtr, threshold, &found, &found_num ) < 0 ) {    fprintf( stderr, "ERROR: arDetectMarker\n" );    fflush( stderr );    cleanup();    exit( 1 );  }    if (!fixed_world) {    // process the detected floater markers - there is only the    // anchor marker in fixed_world    current_marker = NULL;    for( vector< Marker * >::iterator i = floater_markers.begin() ;	 i != floater_markers.end() ; ++i )    {      int k = -1;      for( int j = 0 ; j < found_num ; ++j )	if( found[ j ].id == ( *i )->id )	  k = j;            if( k != -1 ) {	arGetTransMat( &found[ k ], ( *i )->center, 		       ( *i )->width, ( *i )->trans );		double gl_para[16];	argConvGlparad((*i)->trans, gl_para);	hv_set_floater_transform((*i)->id, true, gl_para);      }      else      {	hv_set_floater_transform((*i)->id, false, NULL);      }    }  }    // process the detected anchored markers  double multiError = arMultiGetTransMat( found, found_num, multi_markers );  multiVisible = ( multiError >= 0.0 && multiError < 100.0 );    if( multiVisible ) {    double gl_para[16];    argConvGlparad(multi_markers->trans, gl_para);    if (fixed_world) {      hv_set_floater_transform(0, true, gl_para);    } else {      hv_set_anchor_transform(true, gl_para);    }  }  argDrawMode3D();  argDraw3dCamera( 0, 0 );      glDepthFunc( GL_LEQUAL );  glEnable( GL_DEPTH_TEST );  glEnable( GL_NORMALIZE );  glEnable( GL_LIGHTING );  glDisable( GL_TEXTURE_2D );  glDisable( GL_CULL_FACE );  glMatrixMode( GL_MODELVIEW );  hv_draw(true);  // draw markers  if( show_markers ) {    if( multiVisible )      drawMulti( multi_markers );    for( vector< Marker * >::iterator i = floater_markers.begin() ;	 i != floater_markers.end() ; ++i ) {      if( ( *i )->visible ) {	glColor4d(0, 0, 0, 0.4);	drawMarker( *i );      }    }  }  /*    if (floater_visible[i]) {      glPushMatrix();        glMultMatrixd(&floaterpositions[ i ][0]);	glDisable(GL_LIGHTING);	drawBullseye(40, 3);	glEnable(GL_LIGHTING);      glPopMatrix();    }  }}  */  if (take_snapshots && fullsize_snapshots) {    if (!framePixels) {      fprintf( stderr, "error: framePixels not set\n");      exit(-1);    }    glReadBuffer( GL_BACK );    glReadPixels( 0, 0, xsize, ysize, GL_BGR, GL_UNSIGNED_BYTE, 		  framePixels );    hv_save_frame((char*) framePixels, xsize, ysize, 		  fullsize_snapshots);  }  sdlutSwapBuffers();}/* turn off all displays, reset the anchored object to a nice * default location */void ResetWorld(){  double gl_para[] =     {7.275137e-03, 6.592478e-01, -7.518906e-01, 0.000000e+00, 9.997167e-01, -2.183459e-02, -9.471231e-03, 0.000000e+00, -2.266111e-02, -7.516087e-01, -6.592199e-01, 0.000000e+00, 4.982944e+01, -3.182761e+01, 1.200848e+03, 1.000000e+00};  hv_set_anchor_transform(true, gl_para);  for( vector< Marker * >::iterator i = floater_markers.begin() ;       i != floater_markers.end() ; ++i ) {    hv_set_floater_transform((*i)->id, false, NULL);  }  initObjs();}void keyboardFunc( SDL_KeyboardEvent *e ){  switch( e->keysym.sym )  {  case SDLK_ESCAPE:  case 'q':    if( e->type == SDL_KEYUP )    {      quit();    }    return;    break;  case 'm':    if ( e->type == SDL_KEYDOWN ) {      show_markers = !show_markers;      char buf[256];      sprintf( buf, "INFO: %sshowing markers", 	       show_markers ? "" : "not " );      hv_show_message(buf);    }    break;  case 'e':    if ( e->type == SDL_KEYDOWN ) {      hv_toggle_adjust_exposure();    }    break;  case 'f':    if ( e->type == SDL_KEYDOWN ) {      fixed_world = !fixed_world;      char buf[256];      sprintf( buf, "INFO: fixed world is now %s", 	       fixed_world ? "on" : "off" );      hv_show_message(buf);    }    break;  case 'w':    if ( e->type == SDL_KEYDOWN ) {      ResetWorld();      hv_show_message("INFO: world reset");    }    break;  case 's':    if( e->type == SDL_KEYDOWN )      {	take_snapshots = !take_snapshots;	char buf[256];	sprintf( buf, "INFO: %staking %ssnapshots", 		 take_snapshots ? "" : "not ",		 fullsize_snapshots ? "fullsize " : "");	hv_show_message(buf);      }    break;  case '=':    if (e->type == SDL_KEYDOWN) {// && e->keysym.mod & KMOD_SHIFT) {      threshold = min(255, threshold+10);      char buf[256];      sprintf(buf, "INFO: threshold now %d", threshold);      hv_show_message(buf);    }    break;  case '-':    if (e->type == SDL_KEYDOWN) {      threshold = max(0, threshold-10);      char buf[256];      sprintf(buf, "INFO: threshold now %d", threshold);      hv_show_message(buf);    }    break;  default:    if (e->type == SDL_KEYDOWN && e->keysym.mod==0) {      // hand to HandVu      hv_key_pressed(e->keysym.sym);      break;    }  }}void mouseFunc( SDL_MouseButtonEvent *e ){  if( e->state == SDL_PRESSED )  {    if (e->button==1) {  // left button      hv_pointer_update(HV_PTR_SHOW, HV_PTR_LBUTTON_PRESSED, 			e->x, e->y);    } else if (e->button==3 ) {  // right button      hv_pointer_update(HV_PTR_SHOW, HV_PTR_RBUTTON_PRESSED, 			e->x, e->y);    }  }  else if( e->state == SDL_RELEASED ) {     hv_pointer_update(HV_PTR_SHOW, HV_PTR_BUTTON_RELEASED, 		      e->x, e->y);  } }void motionFunc( SDL_MouseMotionEvent *e ){  mouse_moved = true;  mouse_x = e->x;  mouse_y = e->y;  // pointer update happens in displayFunc to avoid a   // large lag between the two and too many updates}void idleFunc(){  sdlutPostRedisplay();}//-------------------------------------------------------------------------// picking helper functions//-------------------------------------------------------------------------static void selectDraw(){  argDrawMode3D();  argMult3dCamera( 0, 0 );      glDepthFunc( GL_LEQUAL );  glEnable( GL_DEPTH_TEST );  glDisable( GL_LIGHTING );  glDisable( GL_NORMALIZE );  glDisable( GL_TEXTURE_2D );  glDisable( GL_CULL_FACE );  glMatrixMode( GL_MODELVIEW );  glPushMatrix();  DrawMode = SELECT_MODE;  //server->draw();  hv_draw(false);  glMatrixMode( GL_MODELVIEW );  glPopMatrix();}/* * do selection render pass.  call process_selection to determine * results of selection.  return true if hit, false if miss. */bool render_select( int x, int y, int* selected,  		   d3* selected_win){  GLuint selectBuffer[ SELECT_BUF_SIZE ];  GLint hits;  glSelectBuffer( SELECT_BUF_SIZE, selectBuffer );  glRenderMode( GL_SELECT );  glInitNames();  glPushName(0);  /*   * set up pick matrix as 5x5 window around cursor   */  glMatrixMode( GL_PROJECTION );  glPushMatrix();  glLoadIdentity();  gluPickMatrix( ( GLdouble )x, ( GLdouble )( viewport[ 3 ] - y ),                 5.0, 5.0, viewport );  glMatrixMode( GL_MODELVIEW );  *selected = -1;          selectDraw();  glMatrixMode( GL_PROJECTION );  glPopMatrix();  glMatrixMode( GL_MODELVIEW );  glFlush();  /*   * check selection buffer for hits   */  hits = glRenderMode( GL_RENDER );  return process_selection( hits, selectBuffer, x, y,			    selected, selected_win);}/* * once hits are recorded from selection pass, process selection * buffer to determine what was selected */bool process_selection ( GLint hits, GLuint *buffer, int x, int y,			 int* selected,  			 d3* selected_win){  float min_depth = FLT_MAX;  GLuint *ptr = buffer;  GLint names;  float depth;  unsigned int name = 0, tempname = 0;  if( hits == -1 )  {    fprintf( stderr, "WARNING: selection namestack overflow\n" );    return false;  }  for( int i = 0 ; i < hits ; ++i )  {    names = *ptr;                          ++ptr;    depth = ( float )*ptr / 0xffffffff;    ++ptr;  ++ptr;/* * note - redbook says to divide by 0x7fffffff but that clearly wasn't * working, as reported depth was twice actual value.  so, changing * to 0xffffffff fixes the problem. */    if( names != 1 )    {      fprintf( stderr, "WARNING: unexpected name length %d\n", names );      for( int j = 0 ; j < names ; ++j )        ++ptr;    }    else    {      tempname = *ptr; ++ptr;    }    /*     * after extracting depth and name of hit record, store if it's     * the closest to the camera     */    if( depth < min_depth )    {      min_depth = depth;      name = tempname;    }  }  /*   * 0 is the default name - a miss   */  if( name == 0 )    return false;  /*   * id of teapot is name - 1 (starts at index 0)   * store selected coordinates   */  *selected = name - 1;  selected_win->x = x;  selected_win->y = viewport[ 3 ] - y - 1;  selected_win->z = min_depth;  return true;}int nextpowerof2 ( int x ){  if( x <= 2 ) return 2;  if( x <= 4 ) return 4;  if( x <= 8 ) return 8;  if( x <= 16 ) return 16;  if( x <= 32 ) return 32;  if( x <= 64 ) return 64;  if( x <= 128 ) return 128;  if( x <= 256 ) return 256;  if( x <= 512 ) return 512;  if( x <= 1024 ) return 1024;  if( x <= 2048 ) return 2048;  return 4096;}void makeTexture ( unsigned char *pixels, int width, int height,                   texture_info *tex ){  if( ! pixels )  {    fprintf( stderr, "null pixels!\n" );    return;  }  if( tex->id == 0 )  {    tex->iw = width;    tex->ih = height;    tex->tw = nextpowerof2( width );    tex->th = nextpowerof2( height );    tex->s = tex->iw / ( float )tex->tw;    tex->t = tex->ih / ( float )tex->th;    glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );    unsigned char *zeros = new unsigned char[ tex->tw * tex->th * 3 ];    memset( zeros, 0, tex->tw * tex->th * 3 );    glGenTextures( 1, &tex->id );    glBindTexture( GL_TEXTURE_2D, tex->id );    glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );    glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );    glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );    glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );    glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, tex->tw, tex->th, 0, GL_RGB,                   GL_UNSIGNED_BYTE, zeros );    glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex->iw, tex->ih, GL_RGB,                      GL_UNSIGNED_BYTE, pixels );    glBindTexture( GL_TEXTURE_2D, 0 );    delete[] zeros;  }  else  {    glBindTexture( GL_TEXTURE_2D, tex->id );    glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, tex->iw, tex->ih, GL_RGB,                      GL_UNSIGNED_BYTE, pixels );    glBindTexture( GL_TEXTURE_2D, 0 );  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久99精品久久久久久| 久久免费精品国产久精品久久久久| 欧美一级欧美三级在线观看| xnxx国产精品| 丝袜亚洲另类欧美综合| 99国产精品久久久久| 精品国产一区二区三区久久久蜜月 | 久久国产精品色婷婷| 色综合久久久久久久久| 久久精品在线免费观看| 另类人妖一区二区av| 欧美偷拍一区二区| 中文字幕亚洲不卡| 高清不卡一区二区在线| 精品欧美一区二区在线观看| 亚洲高清免费观看| 欧美午夜不卡视频| 一区二区国产盗摄色噜噜| av午夜精品一区二区三区| 久久只精品国产| 国内外成人在线视频| 日韩视频永久免费| 久久电影网电视剧免费观看| 欧美精品在线视频| 日本三级韩国三级欧美三级| 欧美精品在线观看一区二区| 亚洲成人在线免费| 欧美精品777| 美女网站色91| 欧洲一区在线观看| 精品久久国产97色综合| 91精品国产一区二区三区香蕉| 欧美日本在线观看| 91色porny| 成人免费视频网站在线观看| 岛国av在线一区| 一级做a爱片久久| 亚洲免费观看高清完整版在线| 久久久久久一二三区| 国产精品久久久久影视| 成人免费黄色大片| 91福利在线看| 亚洲一区二区三区精品在线| 91国产丝袜在线播放| 亚洲一级电影视频| 91精品国产欧美一区二区| 免费人成网站在线观看欧美高清| 精品国精品国产| 国产成人av影院| 亚洲激情男女视频| 欧美福利一区二区| 国内精品视频一区二区三区八戒| 国产人伦精品一区二区| 成人黄色免费短视频| 亚洲综合色成人| 日韩精品一区二区三区swag| 粉嫩久久99精品久久久久久夜| 国产精品黄色在线观看| 欧美性视频一区二区三区| 日本一道高清亚洲日美韩| 国产视频一区在线播放| 91在线免费看| 日本中文字幕一区二区视频 | 中文子幕无线码一区tr| 91在线视频18| 精品无人码麻豆乱码1区2区| 国产精品丝袜久久久久久app| 欧美亚男人的天堂| 成人做爰69片免费看网站| 亚洲国产视频在线| 国产清纯美女被跳蛋高潮一区二区久久w| 99久久亚洲一区二区三区青草| 香港成人在线视频| 国产精品免费视频网站| 欧美精品久久久久久久多人混战| 国产成人在线电影| 青青草国产精品97视觉盛宴| 国产精品女上位| 欧美成人一区二区| 91国产成人在线| 成人午夜视频免费看| 日本不卡的三区四区五区| 亚洲免费观看高清完整版在线 | 亚洲综合男人的天堂| 国产亚洲成aⅴ人片在线观看| 欧美视频在线观看一区二区| 丁香六月综合激情| 蜜臀久久久99精品久久久久久| 亚洲日本丝袜连裤袜办公室| 久久久久久9999| 欧美成人三级在线| 欧美精品成人一区二区三区四区| 色婷婷一区二区三区四区| 成人精品国产免费网站| 激情文学综合插| 日本va欧美va精品| 亚洲va欧美va国产va天堂影院| 丝袜亚洲另类欧美| 亚洲一二三四区| 亚洲日本在线天堂| 亚洲图片激情小说| 最新热久久免费视频| 国产精品天干天干在线综合| 精品国产乱码久久久久久影片| 欧美一级午夜免费电影| 777久久久精品| 欧美精品v国产精品v日韩精品| 欧美日韩一区三区| 欧美亚一区二区| 欧美日韩不卡在线| 欧美日韩国产三级| 91麻豆精品国产| 欧美日韩成人综合| 在线播放/欧美激情| 91精品国产综合久久福利软件| 欧美妇女性影城| 日韩精品一区二区在线| 日韩精品最新网址| 精品欧美一区二区久久| 久久精品视频在线免费观看| 国产色91在线| 国产精品麻豆99久久久久久| ...av二区三区久久精品| 亚洲人123区| 香蕉成人啪国产精品视频综合网 | 亚洲欧美国产三级| 亚洲六月丁香色婷婷综合久久| 亚洲精品免费在线播放| 亚洲成人自拍一区| 久久精品国产99国产精品| 国产乱一区二区| 91麻豆精品一区二区三区| 91黄色在线观看| 日韩欧美美女一区二区三区| 国产亚洲精品超碰| 亚洲精品国产精华液| 日韩福利电影在线观看| 韩国一区二区三区| 91丨九色丨蝌蚪丨老版| 欧美精品三级日韩久久| 国产亚洲精久久久久久| 一区二区三区免费看视频| 日韩avvvv在线播放| 粉嫩aⅴ一区二区三区四区五区| 91在线精品一区二区| 欧美一区二区在线播放| 久久色.com| 亚洲成人免费电影| 国产激情一区二区三区四区| 91在线视频免费观看| 日韩一区二区在线播放| 国产精品无遮挡| 天堂蜜桃一区二区三区| 高清国产一区二区三区| 欧美日韩在线不卡| 久久久久久久精| 日日夜夜精品免费视频| 国产suv一区二区三区88区| 欧美精品丝袜久久久中文字幕| 国产日韩欧美一区二区三区乱码 | 欧美精品少妇一区二区三区| 久久精品无码一区二区三区| 亚洲一级不卡视频| 成人精品视频网站| 欧美大片顶级少妇| 亚洲大片精品永久免费| 国产成人8x视频一区二区| 欧美精品在线观看一区二区| 国产精品伦理在线| 国产真实乱偷精品视频免| 欧美日韩国产综合一区二区三区| 国产日产精品1区| 国产福利91精品一区| 欧美精品一级二级三级| 亚洲日本在线天堂| 成人午夜视频免费看| 精品久久久久一区二区国产| 亚洲国产cao| 一本色道**综合亚洲精品蜜桃冫| 国产欧美日产一区| 国产精品一区免费在线观看| 欧美精品一二三| 亚洲mv大片欧洲mv大片精品| 91日韩在线专区| 国产精品美女久久久久久久| 国产一区二区三区国产| 日韩精品一区二区三区中文不卡| 亚洲444eee在线观看| 欧美三级视频在线| 艳妇臀荡乳欲伦亚洲一区| 91麻豆精东视频| 亚洲女同一区二区| 色妞www精品视频| 亚洲黄色免费电影| 色域天天综合网| 一区二区高清视频在线观看| 色视频成人在线观看免| 一级日本不卡的影视| 欧美亚男人的天堂| 天天色图综合网|