/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*= gluthack.h の利用例のプログラム 製作 渡辺尚貴 =*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ #include #include #include #include "gluthack.h" //---- 描画のパラメタ const double L = 8.0; // 系のサイズ const int N = 32; // データの要素数 const double dL = L/N; // 空間刻幅 const int WIN_WID = 256; // 窓の横幅 const int WIN_HEI = 256; // 窓の縦幅 const GLfloat WIN_COL[] = { 0.0, 0.0, 0.0, 1.0 }; // 背景の色 const GLdouble EYE_POS[] = { 0.0, 0.0, 2*L }; // 視点の位置 const GLdouble GAZE_POS[] = { 0.0, 0.0, 0.0 }; // 凝視点の位置 const GLdouble UP_DIR[] = { 0.0, 1.0, 0.0 }; // 鉛直方向 const GLdouble SCOPE_ANG = 32.0; // 視野角 const GLdouble SCOPE_NEAR = L/2; // 近視野距離 const GLdouble SCOPE_FAR = 6*L; // 遠視野距離 const GLfloat LIGHT_POS[] = { 0.0, 0.0, 2*L }; // 照明位置 const GLfloat LIGHT_DIF[] = { 1.0, 1.0, 1.0, 1.0 }; // 拡散光の色 const GLfloat LIGHT_SPE[] = { 1.0, 1.0, 1.0, 1.0 }; // 反射光の色 const GLfloat LIGHT_AMB[] = { 0.8, 0.8, 0.8, 1.0 }; // 環境光の色 const GLfloat OBJ_COL[] = { 0.5, 0.5, 0.8, 0.5 }; // 物体の拡散色 const GLfloat OBJ_SPE[] = { 1.0, 1.0, 1.0, 1.0 }; // 物体の反射色 const GLfloat OBJ_SHIN = 256.0; // 物体の反射強度 enum { LIST_ZERO, LIST_WIRE, LIST_SURFACE, LIST_VECTOR, LIST_TEXTURE }; enum { MENU_SCREEN, MENU_LIST, MENU_QUIT }; //---- 種々の状態変数 static bool do_screen = false; // フルスクリーンで描くか static int draw_list = LIST_WIRE; // 描く物体 //---- データ格納用の変数 static double Z[N][N]; static Vector2 V[N][N]; static Texture tex; //---- 簡単な解説 void PrintUsage( void ) { puts( "------------------------------------\n" "gluthack.h の利用例のプログラム\n" "------------------------------------\n" "操作方法:\n" "左ドラッグで物体が回転し始めます。\n" "右クリックでメニューが現れます。\n" "方向キーで物体が移動します。\n" "sキーで画面がファイルに保存されます。\n" "ESCキーで終了です。\n" ); } //---- 描く物体のデータの作成 void InitData( void ) { const double kx = 2*M_PI/L; const double ky = 2*M_PI/L; int i, j; for( i=0; i