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

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

?? example3.cpp

?? c++源程序
?? CPP
字號:
/****************************************************************************

  example3.cpp

  A GLUT program using all the features of the GLUI User Interface Library
  (except columns, featured in example4.cpp)

  -----------------------------------------------------------------------
	   
  9/9/98 Paul Rademacher (rademach@cs.unc.edu)

****************************************************************************/

#include <string.h>
#include <GL/glut.h>
#include "glui.h"

float xy_aspect;
int   last_x, last_y;
float rotationX = 0.0, rotationY = 0.0;

/** These are the live variables passed into GLUI ***/
int   wireframe = 0;
int   obj_type = 1;
int   segments = 8;
int   segments2 = 8;
char  text[sizeof(GLUI_String)] = {"Hello World!"};
int   light0_enabled = 1;
int   light1_enabled = 0;
float light0_intensity = 1.0;
float light1_intensity = 1.0;
int   main_window;
int   counter = 0;
float scale = 1.0;

/** Pointers to the windows and some of the controls we'll create **/
GLUI *cmd_line_glui, *glui;
GLUI_Checkbox   *checkbox;
GLUI_Spinner    *spinner, *light0_spinner, *light1_spinner, *scale_spinner;
GLUI_RadioGroup *radio;
GLUI_EditText   *edittext, *cmd_line;
GLUI_Panel      *obj_panel;

/********** User IDs for callbacks ********/
#define CMD_LINE_ID          100
#define LIGHT0_ENABLED_ID    200
#define LIGHT1_ENABLED_ID    201
#define LIGHT0_INTENSITY_ID  250
#define LIGHT1_INTENSITY_ID  251

/********** Miscellaneous global variables **********/

GLfloat light0_ambient[] =  {0.1f, 0.1f, 0.3f, 1.0f};
GLfloat light0_diffuse[] =  {.6f, .6f, 1.0f, 1.0f};
GLfloat light0_position[] = {.5f, .5f, 1.0f, 0.0f};

GLfloat light1_ambient[] =  {0.1f, 0.1f, 0.3f, 1.0f};
GLfloat light1_diffuse[] =  {.9f, .6f, 0.0f, 1.0f};
GLfloat light1_position[] = {-1.0f, -1.0f, 1.0f, 0.0f};

/**************************************** control_cb() *******************/
/* GLUI control callback                                                 */

void control_cb( int control )
{
  if ( control == CMD_LINE_ID ) {
    /*** User typed text into the 'command line' window ***/
    printf( "Command (%d): %s\n", counter, cmd_line->get_text() );
    cmd_line->set_text( "" );  /* Clear command line */
  }
  else if ( control == LIGHT0_ENABLED_ID ) {
    if ( light0_enabled ) {
      glEnable( GL_LIGHT0 );
      light0_spinner->enable();
    }
    else {
      glDisable( GL_LIGHT0 ); 
      light0_spinner->disable();
    }
  }
  else if ( control == LIGHT1_ENABLED_ID ) {
    if ( light1_enabled ) {
      glEnable( GL_LIGHT1 );
      light1_spinner->enable();
    }
    else {
      glDisable( GL_LIGHT1 ); 
      light1_spinner->disable();
    }
  }
  else if ( control == LIGHT0_INTENSITY_ID ) {
    float v[] = { light0_diffuse[0],  light0_diffuse[1],
		  light0_diffuse[2],  light0_diffuse[3] };
    
    v[0] *= light0_intensity;
    v[1] *= light0_intensity;
    v[2] *= light0_intensity;

    glLightfv(GL_LIGHT0, GL_DIFFUSE, v );
  }
  else if ( control == LIGHT1_INTENSITY_ID ) {
    float v[] = { light1_diffuse[0],  light1_diffuse[1],
		  light1_diffuse[2],  light1_diffuse[3] };
    
    v[0] *= light1_intensity;
    v[1] *= light1_intensity;
    v[2] *= light1_intensity;

    glLightfv(GL_LIGHT1, GL_DIFFUSE, v );
  }
}

/**************************************** myGlutKeyboard() **********/

void myGlutKeyboard(unsigned char Key, int x, int y)
{
  switch(Key)
  {
  case 27: 
  case 'q':
    exit(0);
    break;
  };
  
  glutPostRedisplay();
}


/***************************************** myGlutMenu() ***********/

void myGlutMenu( int value )
{
  myGlutKeyboard( value, 0, 0 );
}


/***************************************** myGlutIdle() ***********/

void myGlutIdle( void )
{
  /* According to the GLUT specification, the current window is 
     undefined during an idle callback.  So we need to explicitly change
     it if necessary */
  if ( glutGetWindow() != main_window ) 
    glutSetWindow(main_window);  


  glutPostRedisplay();

  /****************************************************************/
  /*            This demonstrates GLUI::sync_live()               */
  /*   We change the value of a variable that is 'live' to some   */
  /*   control.  We then call sync_live, and the control          */
  /*   associated with that variable is automatically updated     */
  /*   with the new value.  This frees the programmer from having */
  /*   to always remember which variables are used by controls -  */
  /*   simply change whatever variables are necessary, then sync  */
  /*   the live ones all at once with a single call to sync_live  */
  /****************************************************************/

  counter++;
   
  glui->sync_live();

}

/***************************************** myGlutMouse() **********/

void myGlutMouse(int button, int button_state, int x, int y )
{
  if ( button == GLUT_LEFT_BUTTON && button_state == GLUT_DOWN ) {
    last_x = x;
    last_y = y;
  }
}


/***************************************** myGlutMotion() **********/

void myGlutMotion(int x, int y )
{
  rotationX += (float) (y - last_y);
  rotationY += (float) (x - last_x);

  last_x = x;
  last_y = y;

  glutPostRedisplay(); 
}

/**************************************** myGlutReshape() *************/

void myGlutReshape( int x, int y )
{
  xy_aspect = (float)x / (float)y;
  glViewport( 0, 0, x, y );

  glutPostRedisplay();
}

/***************************************** myGlutDisplay() *****************/

void myGlutDisplay( void )
{
  glClearColor( .9f, .9f, .9f, 1.0f );
  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

  glMatrixMode( GL_PROJECTION );
  glLoadIdentity();
  glFrustum( -xy_aspect*.08, xy_aspect*.08, -.08, .08, .1, 15.0 );

  glMatrixMode( GL_MODELVIEW );
  glLoadIdentity();
  glTranslatef( 0.0, 0.0, -1.2f );
  glRotatef( rotationY, 0.0, 1.0, 0.0 );
  glRotatef( rotationX, 1.0, 0.0, 0.0 );

  glScalef( scale, scale, scale );

  /*** Now we render object, using the variables 'obj_type', 'segments', and
    'wireframe'.  These are _live_ variables, which are transparently 
    updated by GLUI ***/
  
  if ( obj_type == 0 ) {
    if ( wireframe )      
      glutWireSphere( .6, segments, segments );
    else                  
      glutSolidSphere( .6, segments, segments );
  }
  else if ( obj_type == 1 ) {
    if ( wireframe )
      glutWireTorus( .2,.5,16,segments );
    else
      glutSolidTorus( .2,.5,16,segments );
  }
  else if ( obj_type == 2 ) {
    if ( wireframe )
      glutWireTeapot( .5 );
    else
      glutSolidTeapot( .5 );
  }

  /* Disable lighting and set up ortho projection to render text */
  glDisable( GL_LIGHTING );  
  glMatrixMode( GL_PROJECTION );
  glLoadIdentity();
  gluOrtho2D( 0.0, 100.0, 0.0, 100.0  );
  glMatrixMode( GL_MODELVIEW );
  glLoadIdentity();
  glColor3ub( 0, 0, 0 );
  glRasterPos2i( 10, 10 );

  /*** Render the live character array 'text' ***/
  int i;
  for( i=0; i<(int)strlen( text ); i++ )
    glutBitmapCharacter( GLUT_BITMAP_HELVETICA_18, text[i] );

  glEnable( GL_LIGHTING );

  glutSwapBuffers(); 
}


/**************************************** main() ********************/

void main(int argc, char* argv[])
{
  /****************************************/
  /*   Initialize GLUT and create window  */
  /****************************************/

  glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
  glutInitWindowPosition( 50, 50 );
  glutInitWindowSize( 300, 300 );
 
  main_window = glutCreateWindow( "GLUI Example 3" );
  glutDisplayFunc( myGlutDisplay );
  glutReshapeFunc( myGlutReshape );  
  glutKeyboardFunc( myGlutKeyboard );
  glutMotionFunc( myGlutMotion );
  glutMouseFunc( myGlutMouse );

  /****************************************/
  /*       Set up OpenGL lights           */
  /****************************************/

  glEnable(GL_LIGHTING);
  glEnable( GL_NORMALIZE );

  glEnable(GL_LIGHT0);
  glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);
  glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
  glLightfv(GL_LIGHT0, GL_POSITION, light0_position);

  glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient);
  glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);
  glLightfv(GL_LIGHT1, GL_POSITION, light1_position);

  /****************************************/
  /*          Enable z-buferring          */
  /****************************************/

  glEnable(GL_DEPTH_TEST);

  /****************************************/
  /*         Here's the GLUI code         */
  /****************************************/

  printf( "GLUI version: %3.2f\n", GLUI_Master.get_version() );

  glui = GLUI_Master.create_glui( "GLUI", 0, 400, 50 ); /* name, flags,
							   x, and y */
  glui->add_statictext( "GLUI Example 3" ); 
  obj_panel = glui->add_panel( "Object" );

  /***** Control for the object type *****/

  GLUI_Panel *type_panel = glui->add_panel_to_panel( obj_panel, "Type");
  radio = glui->add_radiogroup_to_panel(type_panel,&obj_type,4,control_cb);
  glui->add_radiobutton_to_group( radio, "Sphere" );
  glui->add_radiobutton_to_group( radio, "Torus" );
  glui->add_radiobutton_to_group( radio, "Teapot" );

  checkbox = 
    glui->add_checkbox_to_panel( obj_panel, "Wireframe", &wireframe, 1, 
				 control_cb );
  spinner  = glui->add_spinner_to_panel( obj_panel, "Segments:",
					 GLUI_SPINNER_INT, &segments);
  spinner->set_int_limits( 3, 60 );
  spinner->set_alignment( GLUI_ALIGN_RIGHT );

  scale_spinner = 
    glui->add_spinner_to_panel( obj_panel, "Scale:",
				GLUI_SPINNER_FLOAT, &scale);
  scale_spinner->set_float_limits( .2f, 4.0 );
  scale_spinner->set_alignment( GLUI_ALIGN_RIGHT );

  glui->add_separator_to_panel( obj_panel );
  edittext = glui->add_edittext_to_panel( obj_panel, "Text:", 
					  GLUI_EDITTEXT_TEXT, text );
  edittext->set_w( 150 );

  /******** Add some controls for lights ********/

  GLUI_Panel *light0 = glui->add_panel( "Light 1" );
  GLUI_Panel *light1 = glui->add_panel( "Light 2" );

  glui->add_checkbox_to_panel( light0, "Enabled", &light0_enabled,
			       LIGHT0_ENABLED_ID, control_cb );
  light0_spinner = 
    glui->add_spinner_to_panel( light0, "Intensity:", GLUI_SPINNER_FLOAT,
				&light0_intensity, LIGHT0_INTENSITY_ID,
				control_cb );
  light0_spinner->set_float_limits( 0.0, 1.0 );

  glui->add_checkbox_to_panel( light1, "Enabled", &light1_enabled,
			       LIGHT1_ENABLED_ID, control_cb );
  light1_spinner = 
    glui->add_spinner_to_panel( light1, "Intensity:", GLUI_SPINNER_FLOAT,
				&light1_intensity, LIGHT1_INTENSITY_ID,
				control_cb );
  light1_spinner->set_float_limits( 0.0, 1.0 );
  light1_spinner->disable();   /* Disable this light initially */

  /****** Add a grayed-out counter *****/
  
  GLUI_EditText *counter_edittext = 
    glui->add_edittext( "Count:", GLUI_EDITTEXT_INT, &counter );
  counter_edittext->disable();

  /****** A 'quit' button *****/

  glui->add_button( "Quit", 0,(GLUI_Update_CB)exit );

  /****** Command line window ******/

  cmd_line_glui = GLUI_Master.create_glui( "Enter command:",
					   0, 50, 500 );
  
  cmd_line = cmd_line_glui->add_edittext( "Command:",
					  GLUI_EDITTEXT_TEXT, NULL,
					  CMD_LINE_ID, control_cb );
  cmd_line->set_w( 400 );  /** Widen 'command line' control **/

  /**** Link windows to GLUI, and register idle callback ******/
  
  glui->set_main_gfx_window( main_window );
  cmd_line_glui->set_main_gfx_window( main_window );

  /* We register the idle callback with GLUI, not with GLUT */
  GLUI_Master.set_glutIdleFunc( myGlutIdle );

  /**** Regular GLUT main loop ****/  
  glutMainLoop();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美不卡在线观看视频| 99在线精品观看| 欧美性大战久久久久久久蜜臀| 国产成人在线观看| 国产不卡视频在线观看| 国产精品区一区二区三区| eeuss国产一区二区三区| 亚洲精品国产一区二区精华液 | 日韩国产欧美在线观看| 亚洲成在线观看| 久久久99精品久久| 欧美午夜在线一二页| 久久精品国产秦先生| 成人黄色小视频| 国产老肥熟一区二区三区| 欧美日韩国产综合久久| 极品少妇xxxx精品少妇偷拍| 一区2区3区在线看| 精品国产青草久久久久福利| 日本最新不卡在线| 精品理论电影在线| 欧美在线|欧美| 欧美日韩高清一区二区不卡| 国产69精品久久777的优势| 亚洲精品国产成人久久av盗摄 | 亚洲最新视频在线观看| 国产欧美日产一区| 亚洲色图欧美在线| 精品少妇一区二区三区视频免付费| 精品乱人伦小说| 亚洲精品成人天堂一二三| 亚洲va国产天堂va久久en| 精品一区二区综合| 一本大道av伊人久久综合| 日韩女优视频免费观看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 亚洲美女电影在线| 国产精品一区二区三区网站| 中文字幕在线播放不卡一区| 色综合 综合色| 国产欧美久久久精品影院| 一本到高清视频免费精品| 久久综合九色综合97婷婷女人| 国产精品国产自产拍高清av| 韩国女主播成人在线观看| 欧美日韩高清一区二区不卡| 综合久久国产九一剧情麻豆| 成人久久久精品乱码一区二区三区| 成人sese在线| 久久精品日韩一区二区三区| 久久97超碰国产精品超碰| 91精品在线麻豆| 久久成人免费网站| 91精品国产丝袜白色高跟鞋| 亚洲va欧美va人人爽| 欧美日韩激情一区二区| 亚洲高清视频在线| 欧美日韩一区视频| 五月天久久比比资源色| 在线成人av影院| 欧美剧情电影在线观看完整版免费励志电影 | 中文字幕制服丝袜成人av| 成人黄色网址在线观看| 午夜精品一区二区三区三上悠亚| 美国毛片一区二区| 精品黑人一区二区三区久久| 国产福利精品一区二区| 亚洲视频在线观看三级| 8v天堂国产在线一区二区| 久久精品国产精品亚洲红杏| 国产精品久久久久久久久久免费看| 粉嫩一区二区三区在线看 | 国产精品自在在线| 亚洲欧洲综合另类| 日韩一区二区三区在线| 国产精品亚洲一区二区三区在线 | 国产白丝精品91爽爽久久| 欧美一区二区三区思思人| 久久久午夜电影| 亚洲人成精品久久久久久 | 91精品一区二区三区久久久久久| 一区二区三国产精华液| 欧美大片国产精品| 福利一区福利二区| 天天色天天操综合| 精品国产一区二区三区四区四| www.欧美色图| 亚洲3atv精品一区二区三区| 26uuu欧美| 制服丝袜亚洲色图| 色呦呦日韩精品| 成人在线视频一区二区| 中日韩av电影| 日韩欧美的一区| 欧美偷拍一区二区| 99精品欧美一区二区三区综合在线| 日韩电影在线观看一区| 伊人婷婷欧美激情| 欧美激情综合网| 精品国产伦一区二区三区观看方式 | 韩国欧美国产1区| 欧美美女网站色| 色香蕉成人二区免费| 激情深爱一区二区| 久久er99精品| 日韩av网站在线观看| 亚洲成av人片一区二区| 亚洲激情校园春色| 一区二区三区日本| 亚洲精品中文在线| 成人h版在线观看| 成人美女视频在线观看| 国产午夜精品在线观看| 久久精品视频一区| 中文字幕av一区 二区| 国产精品卡一卡二| 亚洲欧美另类久久久精品| 精品国偷自产国产一区| 欧美一区二区三区视频在线观看| 日韩二区三区四区| 青草国产精品久久久久久| 久久99国产乱子伦精品免费| 国产91精品精华液一区二区三区| 国产麻豆精品视频| 在线观看日韩一区| 欧美男男青年gay1069videost| 欧美一级片在线观看| 精东粉嫩av免费一区二区三区 | 玖玖九九国产精品| 免费xxxx性欧美18vr| 亚洲欧美日韩国产手机在线| 在线免费观看日本一区| 日韩欧美亚洲一区二区| 国产精品国产三级国产普通话99| 日韩精品免费视频人成| 不卡的电影网站| 精品日韩成人av| 一区二区三区四区av| 国产激情精品久久久第一区二区 | 国产一区二区三区日韩 | 国产亚洲短视频| 国产成人午夜电影网| 日本一区二区三区国色天香 | 久久精品人人做人人综合| 高清不卡一区二区| 一级日本不卡的影视| 亚洲超碰精品一区二区| 欧美mv日韩mv亚洲| 94色蜜桃网一区二区三区| 日韩国产一二三区| 91精品国产色综合久久不卡蜜臀 | 国产成人午夜片在线观看高清观看| 在线观看免费一区| 亚洲女同女同女同女同女同69| 国产成人午夜高潮毛片| 91视频一区二区三区| 亚洲视频精选在线| 欧美日韩在线直播| 亚洲成人精品一区| 日韩美一区二区三区| 精品亚洲aⅴ乱码一区二区三区| 精品入口麻豆88视频| 色综合视频在线观看| 美国一区二区三区在线播放| 国产精品久久毛片a| 欧美系列日韩一区| 国产一区二区不卡老阿姨| 亚洲欧美电影一区二区| 日韩欧美在线网站| 99久久精品一区二区| 日韩主播视频在线| 黄页视频在线91| 日韩综合一区二区| 91丝袜呻吟高潮美腿白嫩在线观看| 一区二区三区四区中文字幕| 欧美喷潮久久久xxxxx| 91久久香蕉国产日韩欧美9色| 国产一区二区精品久久91| 99re6这里只有精品视频在线观看| 国模冰冰炮一区二区| 精品制服美女久久| 久久精品日产第一区二区三区高清版| 91精品国产乱| 日韩欧美视频一区| 久久久久久久网| 中文在线资源观看网站视频免费不卡| 国产欧美一区二区在线| 国产精品伦理一区二区| 日韩美女视频19| 日产国产高清一区二区三区| 麻豆精品新av中文字幕| 国产成人综合在线播放| 99久久国产综合精品女不卡| 91丝袜美腿高跟国产极品老师 | 中文字幕免费不卡| 国产午夜亚洲精品不卡| 91亚洲国产成人精品一区二区三| 欧美性受xxxx黑人xyx性爽| 欧美精品三级日韩久久| 国产无遮挡一区二区三区毛片日本|