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

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

?? fracviewer.c

?? flnx 0.17 是做嵌入linux gui 必備工具箱
?? C
字號:
/* * fractviewer.c [from agviewer.c  (version 1.0)] * * AGV: a glut viewer. Routines for viewing a 3d scene w/ glut * * See agv_example.c and agviewer.h comments within for more info. * * I welcome any feedback or improved versions! * * Philip Winston - 4/11/95 * pwinston@hmc.edu * http://www.cs.hmc.edu/people/pwinston */#include <GL/glut.h>#include <stdio.h>#include <stdlib.h>#include <math.h>#include "fracviewer.h"/* Some <math.h> files do not define M_PI... */#ifndef M_PI#define M_PI 3.14159265#endif/***************************************************************//************************** SETTINGS ***************************//***************************************************************/   /* Initial polar movement settings */#define INIT_POLAR_AZ  0.0#define INIT_POLAR_EL 30.0#define INIT_DIST      4.0#define INIT_AZ_SPIN   0.5#define INIT_EL_SPIN   0.0  /* Initial flying movement settings */#define INIT_EX        0.0#define INIT_EY       -2.0#define INIT_EZ       -2.0#define INIT_MOVE     0.01#define MINMOVE      0.001      /* Start in this mode */#define INIT_MODE   POLAR     /* Controls:  */  /* map 0-9 to an EyeMove value when number key is hit in FLYING mode */#define SPEEDFUNCTION(x) ((x)*(x)*0.001)    /* Multiply EyeMove by (1+-MOVEFRACTION) when +/- hit in FLYING mode */#define MOVEFRACTION 0.25     /* What to multiply number of pixels mouse moved by to get rotation amount */#define EL_SENS   0.5#define AZ_SENS   0.5  /* What to multiply number of pixels mouse moved by for movement amounts */#define DIST_SENS 0.01#define E_SENS    0.01  /* Minimum spin to allow in polar (lower forced to zero) */#define MIN_AZSPIN 0.1#define MIN_ELSPIN 0.1  /* Factors used in computing dAz and dEl (which determine AzSpin, ElSpin) */#define SLOW_DAZ 0.90#define SLOW_DEL 0.90#define PREV_DAZ 0.80#define PREV_DEL 0.80#define CUR_DAZ  0.20#define CUR_DEL  0.20/***************************************************************//************************** GLOBALS ****************************//***************************************************************/int     MoveMode = INIT_MODE;  /* FLYING or POLAR mode? */GLfloat Ex = INIT_EX,             /* flying parameters */        Ey = INIT_EY,        Ez = INIT_EZ,        EyeMove = INIT_MOVE,             EyeDist = INIT_DIST,      /* polar params */        AzSpin  = INIT_AZ_SPIN,        ElSpin  = INIT_EL_SPIN,        EyeAz = INIT_POLAR_AZ,    /* used by both */        EyeEl = INIT_POLAR_EL;int agvMoving;    /* Currently moving?  */int downx, downy,   /* for tracking mouse position */    lastx, lasty,    downb = -1;     /* and button status */						GLfloat downDist, downEl, downAz, /* for saving state of things */        downEx, downEy, downEz,   /* when button is pressed */        downEyeMove;                GLfloat dAz, dEl, lastAz, lastEl;  /* to calculate spinning w/ polar motion */int     AdjustingAzEl = 0;int AllowIdle, RedisplayWindow;    /* If AllowIdle is 1 it means AGV will install its own idle which    * will update the viewpoint as needed and send glutPostRedisplay() to the    * window RedisplayWindow which was set in agvInit().  AllowIdle of 0    * means AGV won't install an idle funciton, and something like    * "if (agvMoving) agvMove()" should exist at the end of the running    * idle function.    */#define MAX(x,y) (((x) > (y)) ? (x) : (y))#define TORAD(x) ((M_PI/180.0)*(x))#define TODEG(x) ((180.0/M_PI)*(x))/***************************************************************//************************ PROTOTYPES ***************************//***************************************************************/  /*   * these are functions meant for internal use only   * the other prototypes are in agviewer.h   */void PolarLookFrom(GLfloat dist, GLfloat elevation, GLfloat azimuth);void FlyLookFrom(GLfloat x, GLfloat y, GLfloat z,                        GLfloat az, GLfloat el);int  ConstrainEl(void);void MoveOn(int v);void SetMove(float newmove);static void normalize(GLfloat v[3]);static void ncrossprod(float v1[3], float v2[3], float cp[3]);/***************************************************************//************************ agvInit ******************************//***************************************************************/void agvInit(int window){  glutMouseFunc(agvHandleButton);  glutMotionFunc(agvHandleMotion);  glutKeyboardFunc(agvHandleKeys);  RedisplayWindow = glutGetWindow();  agvSetAllowIdle(window);}/***************************************************************//************************ VIEWPOINT STUFF **********************//***************************************************************/  /*   * viewing transformation modified from page 90 of red book   */void PolarLookFrom(GLfloat dist, GLfloat elevation, GLfloat azimuth){  glTranslatef(0, 0, -dist);  glRotatef(elevation, 1, 0, 0);  glRotatef(azimuth, 0, 1, 0);}  /*   * I took the idea of tracking eye position in absolute   * coords and direction looking in Polar form from denis   */void FlyLookFrom(GLfloat x, GLfloat y, GLfloat z, GLfloat az, GLfloat el){  float lookat[3], perp[3], up[3];  lookat[0] = sin(TORAD(az))*cos(TORAD(el));  lookat[1] = sin(TORAD(el));  lookat[2] = -cos(TORAD(az))*cos(TORAD(el));  normalize(lookat);  perp[0] = lookat[2];  perp[1] = 0;  perp[2] = -lookat[0];  normalize(perp);  ncrossprod(lookat, perp, up);  gluLookAt(x, y, z,            x+lookat[0], y+lookat[1], z+lookat[2],            up[0], up[1], up[2]);}  /*   * Call viewing transformation based on movement mode   */void agvViewTransform(void){   switch (MoveMode) {    case FLYING:      FlyLookFrom(Ex, Ey, Ez, EyeAz, EyeEl);      break;    case POLAR:      PolarLookFrom(EyeDist, EyeEl, EyeAz);      break;    }}  /*   * keep them vertical; I think this makes a lot of things easier,    * but maybe it wouldn't be too hard to adapt things to let you go   * upside down   */int ConstrainEl(void){  if (EyeEl <= -90) {    EyeEl = -89.99;    return 1;  } else if (EyeEl >= 90) {    EyeEl = 89.99;    return 1;  }  return 0;} /*  * Idle Function - moves eyeposition  */void agvMove(void){  switch (MoveMode)  {    case FLYING:      Ex += EyeMove*sin(TORAD(EyeAz))*cos(TORAD(EyeEl));      Ey += EyeMove*sin(TORAD(EyeEl));      Ez -= EyeMove*cos(TORAD(EyeAz))*cos(TORAD(EyeEl));      break;    case POLAR:      EyeEl += ElSpin;      EyeAz += AzSpin;      if (ConstrainEl()) {  /* weird spin thing to make things look     */        ElSpin = -ElSpin;      /* look better when you are kept from going */                               /* upside down while spinning - Isn't great */        if (fabs(ElSpin) > fabs(AzSpin))          AzSpin = fabs(ElSpin) * ((AzSpin > 0) ? 1 : -1);      }      break;    }  if (AdjustingAzEl) {    dAz *= SLOW_DAZ;    dEl *= SLOW_DEL;  }  if (AllowIdle) {    glutSetWindow(RedisplayWindow);    glutPostRedisplay();  }}  /*   * Don't install agvMove as idle unless we will be updating the view   * and we've been given a RedisplayWindow   */void MoveOn(int v){  if (v && ((MoveMode == FLYING && EyeMove != 0) ||             (MoveMode == POLAR &&             (AzSpin != 0 || ElSpin != 0 || AdjustingAzEl)))) {    agvMoving = 1;    if (AllowIdle)      glutIdleFunc(agvMove);  } else {    agvMoving = 0;    if (AllowIdle)      glutIdleFunc(NULL);  }}  /*   * set new redisplay window.  If <= 0 it means we are not to install   * an idle function and will rely on whoever does install one to    * put statement like "if (agvMoving) agvMove();" at end of it   */void agvSetAllowIdle(int allowidle){  if ((AllowIdle = allowidle))    MoveOn(1);}  /*   * when moving to flying we stay in the same spot, moving to polar we   * reset since we have to be looking at the origin (though a pivot from   * current position to look at origin might be cooler)   */void agvSwitchMoveMode(int move){  switch (move) {    case FLYING:      if (MoveMode == FLYING) return;      Ex    = -EyeDist*sin(TORAD(EyeAz))*cos(TORAD(EyeEl));      Ey    =  EyeDist*sin(TORAD(EyeEl));      Ez    =  EyeDist*(cos(TORAD(EyeAz))*cos(TORAD(EyeEl)));      EyeAz =  EyeAz;      EyeEl = -EyeEl;      EyeMove = INIT_MOVE;      break;    case POLAR:      EyeDist = INIT_DIST;      EyeAz   = INIT_POLAR_AZ;      EyeEl   = INIT_POLAR_EL;      AzSpin  = INIT_AZ_SPIN;      ElSpin  = INIT_EL_SPIN;      break;    }  MoveMode = move;  MoveOn(1);  glutPostRedisplay();}/***************************************************************//*******************    MOUSE HANDLING   ***********************//***************************************************************/void agvHandleButton(int button, int state, int x, int y){ if (state == GLUT_DOWN && downb == -1) {      lastx = downx = x;    lasty = downy = y;    downb = button;        switch (button) {      case GLUT_LEFT_BUTTON:        lastEl = downEl = EyeEl;        lastAz = downAz = EyeAz;        AzSpin = ElSpin = dAz = dEl = 0;        AdjustingAzEl = 1;	MoveOn(1);        break;      case GLUT_MIDDLE_BUTTON:        downDist = EyeDist;	downEx = Ex;	downEy = Ey;	downEz = Ez;	downEyeMove = EyeMove;	EyeMove = 0;    }  } else if (state == GLUT_UP && button == downb) {    downb = -1;    switch (button) {      case GLUT_LEFT_BUTTON:        if (MoveMode != FLYING) {	  AzSpin =  -dAz;	  if (AzSpin < MIN_AZSPIN && AzSpin > -MIN_AZSPIN)	    AzSpin = 0;		  ElSpin = -dEl;	  if (ElSpin < MIN_ELSPIN && ElSpin > -MIN_ELSPIN)	    ElSpin = 0; 	}        AdjustingAzEl = 0;        MoveOn(1);	break;      case GLUT_MIDDLE_BUTTON:	EyeMove = downEyeMove;      }  }} /*  * change EyeEl and EyeAz and position when mouse is moved w/ button down  */void agvHandleMotion(int x, int y){  int deltax = x - downx, deltay = y - downy;  switch (downb) {    case GLUT_LEFT_BUTTON:      EyeEl  = downEl + EL_SENS * ((MoveMode == FLYING) ? -deltay : deltay);      ConstrainEl();      EyeAz  = downAz + AZ_SENS * deltax;      dAz    = PREV_DAZ*dAz + CUR_DAZ*(lastAz - EyeAz);      dEl    = PREV_DEL*dEl + CUR_DEL*(lastEl - EyeEl);      lastAz = EyeAz;      lastEl = EyeEl;      break;    case GLUT_MIDDLE_BUTTON:        EyeDist = downDist + DIST_SENS*deltay;        Ex = downEx - E_SENS*deltay*sin(TORAD(EyeAz))*cos(TORAD(EyeEl));        Ey = downEy - E_SENS*deltay*sin(TORAD(EyeEl));        Ez = downEz + E_SENS*deltay*cos(TORAD(EyeAz))*cos(TORAD(EyeEl));      break;  }  glutPostRedisplay();}/***************************************************************//********************* KEYBOARD HANDLING ***********************//***************************************************************/  /*   * set EyeMove (current speed) for FLYING mode   */void SetMove(float newmove){  if (newmove > MINMOVE) {    EyeMove = newmove;    MoveOn(1);  } else {    EyeMove = 0;    MoveOn(0);  }}  /*   * 0->9 set speed, +/- adjust current speed  -- in FLYING mode   */void agvHandleKeys(unsigned char key, int, int) {  if (MoveMode != FLYING)    return;  if (key >= '0' && key <= '9')    SetMove(SPEEDFUNCTION((key-'0')));  else    switch(key) {      case '+':          if (EyeMove == 0)          SetMove(MINMOVE);         else	  SetMove(EyeMove *= (1 + MOVEFRACTION));        break;      case '-':	SetMove(EyeMove *= (1 - MOVEFRACTION));        break;    }}/***************************************************************//*********************** VECTOR STUFF **************************//***************************************************************/  /* normalizes v */static void normalize(GLfloat v[3]){  GLfloat d = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);  if (d == 0)    fprintf(stderr, "Zero length vector in normalize\n");  else    v[0] /= d; v[1] /= d; v[2] /= d;}  /* calculates a normalized crossproduct to v1, v2 */static void ncrossprod(float v1[3], float v2[3], float cp[3]){  cp[0] = v1[1]*v2[2] - v1[2]*v2[1];  cp[1] = v1[2]*v2[0] - v1[0]*v2[2];  cp[2] = v1[0]*v2[1] - v1[1]*v2[0];  normalize(cp);}/***************************************************************//**************************** AXES *****************************//***************************************************************/  /* draw axes -- was helpful to debug/design things */void agvMakeAxesList(int displaylistnum){  int i,j;  GLfloat axes_ambuse[] =   { 0.5, 0.0, 0.0, 1.0 };  glNewList(displaylistnum, GL_COMPILE);  glPushAttrib(GL_LIGHTING_BIT);  glMatrixMode(GL_MODELVIEW);    glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, axes_ambuse);    glBegin(GL_LINES);      glVertex3f(15, 0, 0); glVertex3f(-15, 0, 0);      glVertex3f(0, 15, 0); glVertex3f(0, -15, 0);      glVertex3f(0, 0, 15); glVertex3f(0, 0, -15);    glEnd();    for (i = 0; i < 3; i++) {      glPushMatrix();        glTranslatef(-10*(i==0), -10*(i==1), -10*(i==2));        for (j = 0; j < 21; j++) {//          glutSolidCube(0.1);          glTranslatef(i==0, i==1, i==2);	}      glPopMatrix();    }  glPopAttrib();  glEndList();  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩三级中文字幕| 亚洲图片自拍偷拍| 亚洲一区二三区| 国产揄拍国内精品对白| 欧美男人的天堂一二区| 国产精品盗摄一区二区三区| 另类调教123区| 欧美日韩一二三| 一区二区三区毛片| 国产又黄又大久久| 欧美一区二区三区免费视频| 亚洲制服欧美中文字幕中文字幕| 国产福利一区在线| 精品999久久久| 视频一区欧美精品| 欧美综合一区二区| 亚洲三级在线免费| 97成人超碰视| 国产清纯美女被跳蛋高潮一区二区久久w | 午夜欧美电影在线观看| 99re在线精品| 中文字幕在线一区二区三区| 国产成人av一区二区三区在线| 欧美电影免费观看高清完整版| 手机精品视频在线观看| 在线观看不卡一区| 亚洲欧美成人一区二区三区| 成熟亚洲日本毛茸茸凸凹| 久久九九全国免费| 国产成人精品一区二| 久久久久国产精品厨房| 国产精品白丝av| 国产欧美一二三区| 国产a视频精品免费观看| 国产丝袜欧美中文另类| 国产福利不卡视频| 亚洲国产电影在线观看| 波多野结衣欧美| 综合久久久久综合| 欧美亚洲国产怡红院影院| 亚洲国产精品一区二区www在线| 欧美最猛黑人xxxxx猛交| 亚洲成人免费av| 日韩一区二区在线看| 国产一区二区三区四区五区美女| 久久久精品国产免大香伊| 国产91露脸合集magnet| 国产精品电影一区二区三区| 色婷婷综合久久久中文字幕| 一卡二卡三卡日韩欧美| 91精品国产综合久久精品app | 91亚洲精品久久久蜜桃| 一级做a爱片久久| 日韩一卡二卡三卡国产欧美| 激情综合网av| 《视频一区视频二区| 色婷婷综合久久久中文字幕| 日韩成人一区二区| 国产欧美一区二区精品久导航| 99re这里都是精品| 日本va欧美va瓶| 国产精品女人毛片| 欧美夫妻性生活| 成人高清在线视频| 丝袜美腿亚洲综合| 国产精品女同互慰在线看| 欧美三级视频在线观看| 国产成人无遮挡在线视频| 一区二区三区在线视频观看58| 欧美一区二区成人| av动漫一区二区| 久久国产精品99久久人人澡| 成人欧美一区二区三区黑人麻豆 | 精品精品国产高清a毛片牛牛| 国产又黄又大久久| 亚洲国产中文字幕在线视频综合| 久久综合色之久久综合| 日本精品视频一区二区| 韩国av一区二区三区四区| 亚洲一区二区在线播放相泽| 久久久精品一品道一区| 欧美美女喷水视频| 99精品欧美一区二区蜜桃免费| 青青国产91久久久久久 | 欧美无砖专区一中文字| 东方aⅴ免费观看久久av| 蜜臀a∨国产成人精品| 亚洲一区二区av在线| 国产精品久久国产精麻豆99网站| 欧美一区二区黄色| 欧美日韩精品一区二区天天拍小说| 国产999精品久久| 免费美女久久99| 丝袜亚洲精品中文字幕一区| 一区二区三区中文免费| 亚洲色图色小说| 中文字幕一区二区三区色视频 | 从欧美一区二区三区| 激情伊人五月天久久综合| 天天操天天综合网| 亚洲夂夂婷婷色拍ww47| 亚洲日本乱码在线观看| 国产精品乱码久久久久久 | 欧美日韩成人综合| 色噜噜夜夜夜综合网| 成人性生交大片免费看视频在线 | 成人午夜激情片| 8x8x8国产精品| 欧美日韩中字一区| 欧美系列在线观看| 欧洲av一区二区嗯嗯嗯啊| 色噜噜夜夜夜综合网| 色婷婷av一区二区| 91国产精品成人| 欧美羞羞免费网站| 欧美乱熟臀69xxxxxx| 欧美精品在线一区二区三区| 4438x成人网最大色成网站| 欧美日韩国产综合草草| 欧美二区三区91| 日韩欧美在线1卡| 精品国产乱码久久久久久闺蜜 | 制服.丝袜.亚洲.另类.中文 | 成人免费av资源| 粉嫩高潮美女一区二区三区| 国产99久久久国产精品潘金网站| 国产酒店精品激情| 99精品黄色片免费大全| 色噜噜狠狠一区二区三区果冻| 在线影视一区二区三区| 在线成人高清不卡| 久久只精品国产| 成人欧美一区二区三区| 亚洲一区二区黄色| 麻豆91精品视频| 高清不卡一区二区在线| 色综合中文综合网| 国产自产v一区二区三区c| 粉嫩久久99精品久久久久久夜| 99久久久精品| 欧美精品一二三| 久久久久久久久久久久久久久99 | www.亚洲在线| 欧美日韩一区二区三区在线看 | 日韩欧美成人激情| 国产精品嫩草99a| 亚洲图片欧美一区| 国产精品1区2区3区在线观看| 91福利在线免费观看| 日韩免费高清电影| 亚洲精品免费一二三区| 久久99久久99小草精品免视看| 成人精品视频一区二区三区| 欧美日韩免费观看一区二区三区| 精品免费日韩av| 亚洲综合久久av| 成人午夜在线免费| 日韩一区二区在线观看| 亚洲天堂精品在线观看| 九九九久久久精品| 欧美午夜宅男影院| 久久久精品免费网站| 日韩电影在线观看网站| 91在线观看免费视频| 欧美大片一区二区三区| 樱桃视频在线观看一区| 国产福利一区二区三区视频| 欧美三级视频在线播放| 国产精品国产三级国产有无不卡 | 亚洲欧美日韩成人高清在线一区| 看片的网站亚洲| 精品视频一区三区九区| 国产精品成人一区二区艾草| 激情综合网激情| 在线综合视频播放| 一区二区高清免费观看影视大全 | 亚洲欧美视频在线观看| 国产成人免费视频网站 | 国产精品888| 精品免费日韩av| 免费成人在线观看视频| 在线视频亚洲一区| 日韩毛片一二三区| 大尺度一区二区| 欧美经典三级视频一区二区三区| 久久精品国内一区二区三区| 欧美三级在线看| 亚洲高清免费视频| 色噜噜夜夜夜综合网| 亚洲欧美色综合| 91免费观看视频| 亚洲欧美日韩在线| 91国产免费观看| 亚洲一区视频在线| 欧美视频在线播放| 午夜a成v人精品| 欧美日韩极品在线观看一区| 香蕉乱码成人久久天堂爱免费| 日本精品免费观看高清观看| 一区二区三区美女|