?? gsub.c
字號:
zoom = gZoom; sx = 0; sy = gWinYsize - 1; } else if( xwin == 1 && ywin == 0 ) { zoom = gZoom; sx = gXsize; sy = gWinYsize - 1; } else { zoom = gZoom / (double)GMINI; sx = (xwin-1)*gMiniXsize; sy = gWinYsize - gYsize - (ywin-1)*gMiniYsize - 1; } glPixelZoom( zoom, -zoom); /* glRasterPos3i( sx, sy, 0 ); */ glRasterPos3i( sx, sy, -1 );#ifdef AR_PIX_FORMAT_ABGR glDrawPixels( gImXsize, gImYsize, GL_ABGR, GL_UNSIGNED_BYTE, image );#endif#ifdef AR_PIX_FORMAT_BGRA glDrawPixels( gImXsize, gImYsize, GL_BGRA, GL_UNSIGNED_BYTE, image );#endif#ifdef AR_PIX_FORMAT_BGR glDrawPixels( gImXsize, gImYsize, GL_BGR, GL_UNSIGNED_BYTE, image );#endif#ifdef AR_PIX_FORMAT_RGBA glDrawPixels( gImXsize, gImYsize, GL_RGBA, GL_UNSIGNED_BYTE, image );#endif#ifdef AR_PIX_FORMAT_RGB glDrawPixels( gImXsize, gImYsize, GL_RGB, GL_UNSIGNED_BYTE, image );#endif}#ifndef _WIN32static void argDispImageTex4( ARUint8 *image, int xwin, int ywin, int mode )#elsestatic void argDispImageTex4( ARUint8 *wimage, int xwin, int ywin, int mode )#endif{ static int initf = 1; static int flag[3][MINIWIN_MAX+2][2]; static int listIndex[3][MINIWIN_MAX+2][2];#ifdef _WIN32 static ARUint8 *image = NULL;#endif double *dist_factor = NULL; double tsx, tsy, tex, tey; double px, py, qx, qy, z; double x1, x2, x3, x4; double y1, y2, y3, y4; double xx1, xx2, xx3, xx4; double yy1, yy2, yy3, yy4; int size_adjust_factor; int list, win; int i, j; switch( mode ) { case 0: dist_factor = &(gCparam.dist_factor[0]); break; }#ifdef _WIN32 if( image == NULL ) { arMalloc(image,ARUint8,gImXsize*tex1Ysize*AR_PIX_SIZE); } memcpy(image, wimage, gImXsize*gImYsize*AR_PIX_SIZE);#endif if( initf ) { for(j=0;j<3;j++) { for(i=0;i<MINIWIN_MAX+2;i++) flag[j][i][0] = flag[j][i][1] = 1; } initf = 0; } if( argTexmapMode == AR_DRAW_TEXTURE_HALF_IMAGE ) { size_adjust_factor = 2; list = 1; } else { size_adjust_factor = 1; list = 0; } if( xwin == 0 && ywin == 0 ) win = 0; else if( xwin == 1 && ywin == 0 ) win = 1; else win = gMiniXnum * (ywin-1) + xwin + 1; glEnable( GL_TEXTURE_2D ); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glPixelStorei( GL_UNPACK_ROW_LENGTH, gImXsize*size_adjust_factor );#ifndef _WIN32 glPixelStorei( GL_UNPACK_IMAGE_HEIGHT, gImYsize/size_adjust_factor );#endif glBindTexture( GL_TEXTURE_2D, glid[0] );#ifdef AR_PIX_FORMAT_ABGR glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_ABGR, GL_UNSIGNED_BYTE, image );#endif#ifdef AR_PIX_FORMAT_BGRA glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_BYTE, image );#endif#ifdef AR_PIX_FORMAT_BGR glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGR, GL_UNSIGNED_BYTE, image );#endif#ifdef AR_PIX_FORMAT_RGBA glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_RGBA, GL_UNSIGNED_BYTE, image );#endif#ifdef AR_PIX_FORMAT_RGB glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_RGB, GL_UNSIGNED_BYTE, image );#endif if( flag[mode][win][list] ) { listIndex[mode][win][list] = glGenLists(1); glNewList(listIndex[mode][win][list], GL_COMPILE_AND_EXECUTE); z = -1.0; qy = gImYsize * 0 / 20.0; tey = ((double)gImYsize / (double)tex1Ysize) * (double)0 / 20.0; for( j = 1; j <= 20; j++ ) { py = qy; tsy = tey; qy = gImYsize * j / 20.0; tey = ((double)gImYsize / (double)tex1Ysize) * (double)j / 20.0; qx = gImXsize * 0 / 20.0; tex = ((double)gImXsize / (double)(tex1Xsize1)) * (double)0 / 20.0; for( i = 1; i <= 20; i++ ) { px = qx; tsx = tex; qx = gImXsize * i / 20.0; tex = ((double)gImXsize / (double)(tex1Xsize1)) * (double)i / 20.0; arParamObserv2Ideal( dist_factor, px, py, &x1, &y1 ); arParamObserv2Ideal( dist_factor, qx, py, &x2, &y2 ); arParamObserv2Ideal( dist_factor, qx, qy, &x3, &y3 ); arParamObserv2Ideal( dist_factor, px, qy, &x4, &y4 ); if( xwin == 0 && ywin == 0 ) { xx1 = x1 * gZoom - 1.0; yy1 = (gWinYsize - 1) - y1 * gZoom; xx2 = x2 * gZoom - 1.0; yy2 = (gWinYsize - 1) - y2 * gZoom; xx3 = x3 * gZoom - 1.0; yy3 = (gWinYsize - 1) - y3 * gZoom; xx4 = x4 * gZoom - 1.0; yy4 = (gWinYsize - 1) - y4 * gZoom; } else if( xwin == 1 && ywin == 0 ) { xx1 = gXsize + x1 * gZoom - 1.0; yy1 = (gWinYsize - 1) - y1 * gZoom; xx2 = gXsize + x2 * gZoom - 1.0; yy2 = (gWinYsize - 1) - y2 * gZoom; xx3 = gXsize + x3 * gZoom - 1.0; yy3 = (gWinYsize - 1) - y3 * gZoom; xx4 = gXsize + x4 * gZoom - 1.0; yy4 = (gWinYsize - 1) - y4 * gZoom; } else { xx1 = (xwin-1)*gMiniXsize + x1*gZoom/(double)GMINI - 1.0; xx2 = (xwin-1)*gMiniXsize + x2*gZoom/(double)GMINI - 1.0; xx3 = (xwin-1)*gMiniXsize + x3*gZoom/(double)GMINI - 1.0; xx4 = (xwin-1)*gMiniXsize + x4*gZoom/(double)GMINI - 1.0; yy1 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y1*gZoom/(double)GMINI - 1.0; yy2 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y2*gZoom/(double)GMINI - 1.0; yy3 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y3*gZoom/(double)GMINI - 1.0; yy4 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y4*gZoom/(double)GMINI - 1.0; } glBegin( GL_QUADS ); glTexCoord2d( tsx, tsy ); glVertex3d( xx1, yy1, z ); glTexCoord2d( tex, tsy ); glVertex3d( xx2, yy2, z ); glTexCoord2d( tex, tey ); glVertex3d( xx3, yy3, z ); glTexCoord2d( tsx, tey ); glVertex3d( xx4, yy4, z ); glEnd(); } } glEndList(); flag[mode][win][list] = 0; } else { glCallList( listIndex[mode][win][list] ); } glBindTexture( GL_TEXTURE_2D, 0 ); glDisable( GL_TEXTURE_2D ); glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );#ifndef _WIN32 glPixelStorei( GL_UNPACK_IMAGE_HEIGHT, 0 );#endif}#ifndef _WIN32static void argDispImageTex3( ARUint8 *image, int xwin, int ywin, int mode )#elsestatic void argDispImageTex3( ARUint8 *wimage, int xwin, int ywin, int mode )#endif{ static int initf = 1; static int flag[3][MINIWIN_MAX+2][2]; static int listIndex[3][MINIWIN_MAX+2][2];#ifdef _WIN32 static ARUint8 *image = NULL;#endif double *dist_factor = NULL; double tsx, tsy, tex, tey; double px, py, qx, qy, z; double x1, x2, x3, x4; double y1, y2, y3, y4; double xx1, xx2, xx3, xx4; double yy1, yy2, yy3, yy4; int size_adjust_factor; int win, list; int i, j; switch( mode ) { case 0: dist_factor = &(gCparam.dist_factor[0]); break; }#ifdef _WIN32 if( image == NULL ) { arMalloc(image,ARUint8,gImXsize*tex1Ysize*AR_PIX_SIZE); } memcpy(image, wimage, gImXsize*gImYsize*AR_PIX_SIZE);#endif if( initf ) { for(j=0;j<3;j++) { for(i=0;i<=MINIWIN_MAX;i++) flag[j][i][0] = flag[j][i][1] = 1; } initf = 0; } if( argTexmapMode == AR_DRAW_TEXTURE_HALF_IMAGE ) { size_adjust_factor = 2; list = 1; } else { size_adjust_factor = 1; list = 0; } if( xwin == 0 && ywin == 0 ) win = 0; else if( xwin == 1 && ywin == 0 ) win = 1; else win = gMiniXnum * (ywin-1) + xwin + 1; glEnable( GL_TEXTURE_2D ); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMatrixMode(GL_MODELVIEW); glPixelStorei( GL_UNPACK_ROW_LENGTH, gImXsize*size_adjust_factor );#ifndef _WIN32 glPixelStorei( GL_UNPACK_IMAGE_HEIGHT, gImYsize/size_adjust_factor );#endif glBindTexture( GL_TEXTURE_2D, glid[0] );#ifdef AR_PIX_FORMAT_ABGR glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_ABGR, GL_UNSIGNED_BYTE, image );#endif#ifdef AR_PIX_FORMAT_BGRA glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_BYTE, image );#endif#ifdef AR_PIX_FORMAT_BGR glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_BGR, GL_UNSIGNED_BYTE, image );#endif#ifdef AR_PIX_FORMAT_RGBA glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_RGBA, GL_UNSIGNED_BYTE, image );#endif#ifdef AR_PIX_FORMAT_RGB glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize1, tex1Ysize/size_adjust_factor, 0, GL_RGB, GL_UNSIGNED_BYTE, image );#endif if( flag[mode][win][list] ) { listIndex[mode][win][list] = glGenLists(2); glNewList(listIndex[mode][win][list], GL_COMPILE_AND_EXECUTE); z = -1.0; qy = gImYsize * 0 / 20.0; tey = ((double)gImYsize / (double)tex1Ysize) * (double)0 / 20.0; for( j = 1; j <= 20; j++ ) { py = qy; tsy = tey; qy = gImYsize * j / 20.0; tey = ((double)gImYsize / (double)tex1Ysize) * (double)j / 20.0; qx = tex1Xsize1 * 0 / 16.0; tex = (double)0 / 16.0; for( i = 1; i <= 16; i++ ) { px = qx; tsx = tex; qx = tex1Xsize1 * i / 16.0; tex = (double)i / 16.0; arParamObserv2Ideal( dist_factor, px, py, &x1, &y1 ); arParamObserv2Ideal( dist_factor, qx, py, &x2, &y2 ); arParamObserv2Ideal( dist_factor, qx, qy, &x3, &y3 ); arParamObserv2Ideal( dist_factor, px, qy, &x4, &y4 ); if( x2 < x1 ) continue; if( x4 > x3 ) continue; if( y4 < y1 ) continue; if( y3 < y2 ) continue; if( x2 < 0 || x3 < 0 ) continue; if( x1 > gImXsize || x4 > gImXsize ) continue; if( y4 < 0 || y3 < 0 ) continue; if( y1 > gImYsize || y2 > gImXsize ) continue; if( xwin == 0 && ywin == 0 ) { xx1 = x1 * gZoom - 1.0; yy1 = (gWinYsize - 1) - y1 * gZoom; xx2 = x2 * gZoom - 1.0; yy2 = (gWinYsize - 1) - y2 * gZoom; xx3 = x3 * gZoom - 1.0; yy3 = (gWinYsize - 1) - y3 * gZoom; xx4 = x4 * gZoom - 1.0; yy4 = (gWinYsize - 1) - y4 * gZoom; } else if( xwin == 1 && ywin == 0 ) { xx1 = gXsize + x1 * gZoom - 1.0; yy1 = (gWinYsize - 1) - y1 * gZoom; xx2 = gXsize + x2 * gZoom - 1.0; yy2 = (gWinYsize - 1) - y2 * gZoom; xx3 = gXsize + x3 * gZoom - 1.0; yy3 = (gWinYsize - 1) - y3 * gZoom; xx4 = gXsize + x4 * gZoom - 1.0; yy4 = (gWinYsize - 1) - y4 * gZoom; } else { xx1 = (xwin-1)*gMiniXsize + x1*gZoom/(double)GMINI - 1.0; xx2 = (xwin-1)*gMiniXsize + x2*gZoom/(double)GMINI - 1.0; xx3 = (xwin-1)*gMiniXsize + x3*gZoom/(double)GMINI - 1.0; xx4 = (xwin-1)*gMiniXsize + x4*gZoom/(double)GMINI - 1.0; yy1 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y1*gZoom/(double)GMINI - 1.0; yy2 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y2*gZoom/(double)GMINI - 1.0; yy3 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y3*gZoom/(double)GMINI - 1.0; yy4 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y4*gZoom/(double)GMINI - 1.0; } glBegin( GL_QUADS ); glTexCoord2d( tsx, tsy ); glVertex3d( xx1, yy1, z ); glTexCoord2d( tex, tsy ); glVertex3d( xx2, yy2, z ); glTexCoord2d( tex, tey ); glVertex3d( xx3, yy3, z ); glTexCoord2d( tsx, tey ); glVertex3d( xx4, yy4, z ); glEnd(); } } glEndList(); } else { glCallList( listIndex[mode][win][list] ); } glBindTexture( GL_TEXTURE_2D, glid[1] );#ifdef AR_PIX_FORMAT_ABGR glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_ABGR, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE );#endif#ifdef AR_PIX_FORMAT_BGRA glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_BGRA, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE );#endif#ifdef AR_PIX_FORMAT_BGR glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_BGR, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE );#endif#ifdef AR_PIX_FORMAT_RGBA glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_RGBA, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE );#endif#ifdef AR_PIX_FORMAT_RGB glTexImage2D( GL_TEXTURE_2D, 0, 3, tex1Xsize2, tex1Ysize/size_adjust_factor, 0, GL_RGB, GL_UNSIGNED_BYTE, image+tex1Xsize1*AR_PIX_SIZE );#endif if( flag[mode][win][list] ) { glNewList(listIndex[mode][win][list]+1, GL_COMPILE_AND_EXECUTE); z = -1.0; qy = gImYsize * 0 / 20.0; tey = ((double)gImYsize / (double)tex1Ysize) * (double)0 / 20.0; for( j = 1; j <= 20; j++ ) { py = qy; tsy = tey; qy = gImYsize * j / 20.0; tey = ((double)gImYsize / (double)tex1Ysize) * (double)j / 20.0; qx = tex1Xsize1 + (gImXsize-tex1Xsize1) * 0 / 4.0; tex = ((double)(gImXsize-tex1Xsize1) / (double)tex1Xsize2) * 0 / 4.0; for( i = 1; i <= 4; i++ ) { px = qx; tsx = tex; qx = tex1Xsize1 + (gImXsize-tex1Xsize1) * i / 4.0; tex = ((double)(gImXsize-tex1Xsize1) / (double)tex1Xsize2) * i / 4.0; arParamObserv2Ideal( dist_factor, px, py, &x1, &y1 ); arParamObserv2Ideal( dist_factor, qx, py, &x2, &y2 ); arParamObserv2Ideal( dist_factor, qx, qy, &x3, &y3 ); arParamObserv2Ideal( dist_factor, px, qy, &x4, &y4 ); if( x2 < x1 ) continue; if( x4 > x3 ) continue; if( y4 < y1 ) continue; if( y3 < y2 ) continue; if( x2 < 0 || x3 < 0 ) continue; if( x1 > gImXsize || x4 > gImXsize ) continue; if( y4 < 0 || y3 < 0 ) continue; if( y1 > gImYsize || y2 > gImXsize ) continue; if( xwin == 0 && ywin == 0 ) { xx1 = x1 * gZoom - 1.0; yy1 = (gWinYsize - 1) - y1 * gZoom; xx2 = x2 * gZoom - 1.0; yy2 = (gWinYsize - 1) - y2 * gZoom; xx3 = x3 * gZoom - 1.0; yy3 = (gWinYsize - 1) - y3 * gZoom; xx4 = x4 * gZoom - 1.0; yy4 = (gWinYsize - 1) - y4 * gZoom; } else if( xwin == 1 && ywin == 0 ) { xx1 = gXsize + x1 * gZoom - 1.0; yy1 = (gWinYsize - 1) - y1 * gZoom; xx2 = gXsize + x2 * gZoom - 1.0; yy2 = (gWinYsize - 1) - y2 * gZoom; xx3 = gXsize + x3 * gZoom - 1.0; yy3 = (gWinYsize - 1) - y3 * gZoom; xx4 = gXsize + x4 * gZoom - 1.0; yy4 = (gWinYsize - 1) - y4 * gZoom; } else { xx1 = (xwin-1)*gMiniXsize + x1*gZoom/(double)GMINI - 1.0; xx2 = (xwin-1)*gMiniXsize + x2*gZoom/(double)GMINI - 1.0; xx3 = (xwin-1)*gMiniXsize + x3*gZoom/(double)GMINI - 1.0; xx4 = (xwin-1)*gMiniXsize + x4*gZoom/(double)GMINI - 1.0; yy1 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y1*gZoom/(double)GMINI - 1.0; yy2 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y2*gZoom/(double)GMINI - 1.0; yy3 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y3*gZoom/(double)GMINI - 1.0; yy4 = gWinYsize-gYsize-(ywin-1)*gMiniYsize - y4*gZoom/(double)GMINI - 1.0;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -