Example #1
0
//-----------------------------------------------------------------------------
void drawShadow()
{
  //計算は平行光線に対する影
  //オブジェクトごとに光源の方向を変え、疑似的に点光源に対する影を作る
  float mat[16]; //影行列の要素

  flagShadow = true;
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

	  glDepthMask(GL_FALSE);
  //影の描画
  CalcShadowMat(0, mat);
  glPushMatrix();
	  glMultMatrixf(mat);//マトリクスの乗算
	  draw0();//オブジェクトの描画
  glPopMatrix();
  CalcShadowMat(1, mat);
  glPushMatrix();
	  glMultMatrixf(mat);//マトリクスの乗算
	  draw1();//オブジェクトの描画
  glPopMatrix();

  //影の描画終了
  glDepthMask(GL_TRUE);
  glDisable(GL_BLEND);
  flagShadow = false;
}
Example #2
0
    virtual void onDraw(SkCanvas* canvas) {
//        this->drawSizeBounds(canvas, 0xFFCCCCCC);

        static SkImageFilter* (*gFilterProc[])() = {
            make0, make1, make2, make3, make4, make5, make6, make7
        };

        const SkRect bounds = SkRect::MakeWH(FILTER_WIDTH, FILTER_HEIGHT);

        const SkScalar dx = bounds.width() * 8 / 7;
        const SkScalar dy = bounds.height() * 8 / 7;

        canvas->translate(SkIntToScalar(8), SkIntToScalar(8));

        for (int i = 0; i < (int)SK_ARRAY_COUNT(gFilterProc); ++i) {
            int ix = i % 4;
            int iy = i / 4;

            SkAutoCanvasRestore acr(canvas, true);
            canvas->translate(ix * dx, iy * dy);

            SkPaint p;
            p.setStyle(SkPaint::kStroke_Style);
            canvas->drawRect(bounds, p);

            SkPaint paint;
            paint.setImageFilter(gFilterProc[i]())->unref();
            canvas->saveLayer(&bounds, &paint);
            draw0(canvas);
        }
    }
void drawScoreboard(paddle *p1, paddle *p2){
  uint32_t gold = 0xffff00; //white = 0xffffff;

  if ( p1->score == 0 )
    draw0(gold,P1_SCORE_X,P1_SCORE_Y);
  else if ( p1->score == 1 )
    draw1(gold,P1_SCORE_X,P1_SCORE_Y); 
  else if ( p1->score == 2 )
    draw2(gold,P1_SCORE_X,P1_SCORE_Y);
  else if ( p1->score == 3 )
    draw3(gold,P1_SCORE_X,P1_SCORE_Y);
  if ( p2->score == 0 )
    draw0(gold,P2_SCORE_X,P2_SCORE_Y);
  else if ( p2->score == 1 )
    draw1(gold,P2_SCORE_X,P2_SCORE_Y); 
  else if ( p2->score == 2 )
    draw2(gold,P2_SCORE_X,P2_SCORE_Y);
  else if ( p2->score == 3 )
    draw3(gold,P2_SCORE_X,P2_SCORE_Y);
}
Example #4
0
void display(void)
{
 //時間計測
  static double time1, time2, drawTime, frame;
  if(ang <= 0.001) time1 = timeGetTime();

  //カラーバッファ,デプスバッファのクリア
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();//視点を変えるときはこの位置に必要
  if(cos(M_PI * view.theta /180.0) >= 0.0)//カメラ仰角90度でビューアップベクトル切替
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0);
  else
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0);

  //光源設定//'l'を押した後光源位置可変
  glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_3D, texName[0]);
  glActiveTexture(GL_TEXTURE1);
  glBindTexture(GL_TEXTURE_3D, texName[1]);
  // シェーダプログラムの適用 
  glUseProgram(shaderProg);
	GLint scaleLoc = glGetUniformLocation(shaderProg, "scale");
	glUniform1f(scaleLoc, scaleTex);
	GLint coordLoc = glGetUniformLocation(shaderProg, "coord");
	if(coord == OBJECT) glUniform1i(coordLoc, 0);
	else glUniform1i(coordLoc, 1);
  GLint texLoc = glGetUniformLocation(shaderProg, "smpl3D");
  glUniform1i(texLoc, 0);//GL_TEXTURE0を適用
  draw0(); 
  glUniform1i(texLoc, 1);//GL_TEXTURE1を適用
  draw1();
  // シェーダプログラムの適用を解除	
  glUseProgram(0);
  drawFloor0(10.0, 10.0, 10, 10);
  //影
  drawShadow();

  //回転角度更新
  ang += dang;
  if(ang >= 360.0)
  {
	time2 = timeGetTime();
	drawTime = (time2 - time1) * 0.001;//1回転当たりの描画時間
	printf("描画時間 = %4.4f[s] \n", drawTime);
	frame = (360.0 / dang) / drawTime;
	printf("フレーム数 = %4.4f[fps] \n", frame);
	ang = 0.0;
  }

  if(flagHelp)
  {
	printf("矢印キーによるアフィン変換/光源移動 \n");
	printf(" →,←:x軸 \n");
	printf(" ↑,↓:y軸 \n");
	printf(" [Shift]+↑,↓:z軸 \n");
	printf(" 'r'を押した後:回転 \n");
	printf(" 't'を押した後:平行移動 \n");
	printf(" 's'を押した後:スケーリング \n");
	printf(" 'l'を押した後、光源位置の移動可 \n");
	printf("マウス操作で視点変更可 \n");
	printf("  dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n");
	printf("  pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n");
	printf("  tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n");
	printf("  tumble:左右にドラッグすると視点が左右に変化する \n");
	printf("  crane:上下にドラッグすると視点が上下に変化する \n");
	printf("  zoom:左下を右ボタンクリックでズームイン \n");
	printf("        右下を右ボタンクリックでズームアウト \n");
	printf("[Shift]+'r'でリセット \n");
	printf("[F1]キー:テクスチャの倍率調整 \n");
	printf("[F2]キー:座標系の切り替え \n");
	flagHelp = false;
  }
  //終了
  glutSwapBuffers();
}
Example #5
0
void display(void)
{
  //時間計測
  static double time1, time2, drawTime, frame;
  if(ang <= 0.001) time1 = timeGetTime();

	//step1:textureの作成
  glClearColor( 0.7, 0.6, 0.6, 1.0 );//背景色
  //framebuffer objectを有効化
	glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fbName );
  glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  glViewport( 0, 0, TEX_WIDTH, TEX_HEIGHT );
	glMatrixMode( GL_PROJECTION );
	glLoadIdentity();
  gluPerspective(fb_view.fovY, (double)TEX_WIDTH/(double)TEX_HEIGHT, 
	                                   fb_view.nearZ, fb_view.farZ);
	glMatrixMode( GL_MODELVIEW );
	glLoadIdentity();
	gluLookAt(fb_view.pos[0], fb_view.pos[1], fb_view.pos[2], fb_view.cnt[0], 
			                       fb_view.cnt[1], fb_view.cnt[2], 0.0, 1.0, 0.0);

  glUseProgram(shaderProg2);
	draw1();
	drawFloor(10.0, 10.0, 10, 10);
  glUseProgram(0);
	drawShadow(1);
  //framebuffer objectの無効化
	glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );

	//step2:通常にrendering
	resize(width, height);
  glClearColor(0.2, 0.2, 0.3, 1.0);//背景色
	//カラーバッファ,デプスバッファのクリア
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();//視点を変えるときはこの位置に必要
  if(cos(M_PI * view.theta /180.0) >= 0.0)//カメラ仰角90度でビューアップベクトル切替
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0);
  else
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0);

  //光源設定//'l'を押した後光源位置可変
  glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

  //描画
  glBindTexture(GL_TEXTURE_2D, texName);
  glUseProgram(shaderProg1);
  GLint samplerLoc = glGetUniformLocation(shaderProg1, "sampler");
  glUniform1i(samplerLoc, 0);//GL_TEXTURE0を適用
  draw0();
  drawFloor(10.0, 10.0, 10, 10);
  glUseProgram(0);
  glBindTexture(GL_TEXTURE_2D, 0);

  //影
  drawShadow(0);

  //回転角度更新
  ang += dang;
  if(ang >= 360.0)
  {
		time2 = timeGetTime();
		//1回転当たりの描画時間
		drawTime = (time2 - time1) * 0.001;
		frame = (360.0 / dang) / drawTime;
		printf("フレーム数 = %4.2f[fps] \n", frame);
		//フレームあたりの描画時間
		drawTime = 1.0 / frame;
		printf("描画時間 = %4.5f[spf] \n", drawTime);		
		ang = 0.0;
  }

	if(flagHelp)
  {
		printf("矢印キーによるアフィン変換/光源移動 \n");
		printf(" →,←:x軸 \n");
		printf(" ↑,↓:y軸 \n");
		printf(" [Shift]+↑,↓:z軸 \n");
		printf(" 'r'を押した後:回転 \n");
		printf(" 't'を押した後:平行移動 \n");
		printf(" 's'を押した後:スケーリング \n");
		printf(" 'l'を押した後、光源位置の移動可 \n");
		printf("マウス操作で視点変更可 \n");
		printf("  dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n");
		printf("  pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n");
		printf("  tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n");
		printf("  tumble:左右にドラッグすると視点が左右に変化する \n");
		printf("  crane:上下にドラッグすると視点が上下に変化する \n");
		printf("  zoom:左下を右ボタンクリックでズームイン \n");
		printf("        右下を右ボタンクリックでズームアウト \n");
		printf("[Shift]+'r'でリセット \n");
		printf("[Page Up]キー:回転角度+0.1 \n");
		printf("[Page Dn]キー:回転角度-0.1 \n");
		flagHelp = false;
  }
  //終了
  glutSwapBuffers();
}
Example #6
0
void display(void)
{
  //時間計測
  static double time1, time2, drawTime, frame;
  if(ang <= 0.001) time1 = timeGetTime();

	//カラーバッファ,デプスバッファのクリア
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();//視点を変えるときはこの位置に必要
  if(cos(M_PI * view.theta /180.0) >= 0.0)//カメラ仰角90度でビューアップベクトル切替
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0);
  else
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0);

  //光源設定//'l'を押した後光源位置可変
  glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

  if(flagWireframe)//'w'でwireframeとsolid model切り替え
  {
	  glPolygonMode(GL_FRONT,GL_LINE);
	  glPolygonMode(GL_BACK,GL_POINT);
  }
  else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D, texName);

  //fragment shaderのユニフォーム変数texのインデックスを取得
  GLint texLoc = glGetUniformLocation(shaderProg, "sampler");
  glUniform1i(texLoc, 0);//GL_TEXTURE0を適用
  // シェーダプログラムの適用 
  glUseProgram(shaderProg);
  //描画
  draw0(); 
  draw1();
  drawFloor0(5.0, 5.0, 5, 5);
  // シェーダプログラムの適用を解除	
  glUseProgram(0);
  //影
  drawShadow();
  //回転角度更新
  ang += dang;
  if(ang >= 360.0)
  {
		time2 = timeGetTime();
		drawTime = (time2 - time1) * 0.001;
		frame = (360.0 / dang) / drawTime;
		printf("フレーム数 = %4.2f[fps] \n", frame);
		//フレームあたりの描画時間
		drawTime = 1.0 / frame;
		printf("描画時間 = %4.5f[spf] \n", drawTime);		
		ang = 0.0;
  }

	if(flagHelp)
  {
		printf("矢印キーによるアフィン変換/光源移動 \n");
		printf(" →,←:x軸 \n");
		printf(" ↑,↓:y軸 \n");
		printf(" [Shift]+↑,↓:z軸 \n");
		printf(" 'r'を押した後:回転 \n");
		printf(" 't'を押した後:平行移動 \n");
		printf(" 's'を押した後:スケーリング \n");
		printf(" 'l'を押した後、光源位置の移動可 \n");
		printf("マウス操作で視点変更可 \n");
		printf("  dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n");
		printf("  pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n");
		printf("  tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n");
		printf("  tumble:左右にドラッグすると視点が左右に変化する \n");
		printf("  crane:上下にドラッグすると視点が上下に変化する \n");
		printf("  zoom:左下を右ボタンクリックでズームイン \n");
		printf("        右下を右ボタンクリックでズームアウト \n");
		printf("[Shift]+'r'でリセット \n");
		printf("[F1]キー:ラップモードの変更 \n");
		printf("[F2]キー:透視投影マッピングの視野角の変更 \n");
		printf("[F3]キー:投影中心の切り替え \n");
		printf("[F4]キー:テクスチャの回転ON/OFF \n");
		printf("[Page Up]キー:回転角度+0.1 \n");
		printf("[Page Dn]キー:回転角度-0.1 \n");
		flagHelp = false;
  }
  //終了
  glutSwapBuffers();
}
Example #7
0
void display(void)
{
  //時間計測
  static double time1, time2, drawTime, frame;
  if(ang <= 0.001) time1 = timeGetTime();

	//カラーバッファ,デプスバッファのクリア
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();//視点を変えるときはこの位置に必要
  if(cos(M_PI * view.theta /180.0) >= 0.0)//カメラ仰角90度でビューアップベクトル切替
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0);
  else
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0);

  if(flagWireframe)//'w'でwireframeとsolid model切り替え
  {
	  glPolygonMode(GL_FRONT,GL_LINE);
	  glPolygonMode(GL_BACK,GL_POINT);
  }
  else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
	setLight();

  glUseProgram(shaderProg);
  //描画
  draw0(); draw1();
  drawFloor(20.0, 20.0, 20, 20);
  glUseProgram(0);
  //影
  drawShadow(0);//光源0に対する影
  drawShadow(1);//光源1に対する影
	//光源描画
	drawLight();
	drawSpotlight();

  //回転角度更新
  ang += dang;
  if(ang >= 360.0)
  {
		time2 = timeGetTime();
		//1回転当たりの描画時間
		drawTime = (time2 - time1) * 0.001;
		frame = (360.0 / dang) / drawTime;
		printf("フレーム数 = %4.4f[fps] \n", frame);
		//フレームあたりの描画時間
		drawTime = 1.0 / frame;
		printf("描画時間 = %4.4f[spf] \n", drawTime);		
		ang = 0.0;
  }

	if(flagHelp)
  {
		printf("矢印キーによるアフィン変換/光源移動 \n");
		printf(" →,←:x軸 \n");
		printf(" ↑,↓:y軸 \n");
		printf(" [Shift]+↑,↓:z軸 \n");
		printf(" 'r'を押した後:回転 \n");
		printf(" 't'を押した後:平行移動 \n");
		printf(" 's'を押した後:スケーリング \n");
		printf(" 'l'を押した後、光源位置の移動可 \n");
		printf("'w'でワイヤーフレームとソリッドモデル切り替え \n");
		printf("マウス操作で視点変更可 \n");
		printf("  dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n");
		printf("  pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n");
		printf("  tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n");
		printf("  tumble:左右にドラッグすると視点が左右に変化する \n");
		printf("  crane:上下にドラッグすると視点が上下に変化する \n");
		printf("  zoom:左下を右ボタンクリックでズームイン \n");
		printf("        右下を右ボタンクリックでズームアウト \n");
		printf("[Shift]+'r'でリセット \n");
		printf("[Page Up]キー:回転角度+0.1 \n");
		printf("[Page Dn]キー:回転角度-0.1 \n");
		printf("[F1]:光源の減衰モード切りかえ \n");
		printf("[F2]キー:スポットライト指数調整 \n");
		printf("[F3]キー:スポットライトのカットオフ角度調整 \n");
		flagHelp = false;
  }
  //終了
  glutSwapBuffers();
}
Example #8
0
void display(void)
{
  //時間計測
  static double time1, time2, drawTime, frame;
  if(ang <= 0.001) time1 = timeGetTime();

  //ステップ1:デプスマップの作成
  glClear(GL_DEPTH_BUFFER_BIT);// デプスバッファをクリアする
  
  // ビューポートをテクスチャのサイズに設定する
  glViewport(0, 0, SHD_WIDTH, SHD_HEIGHT);
  
  // 透視変換行列を単位行列に設定する 
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  
  //光源位置を視点とするモデルビュー変換行列を設定
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  gluPerspective(fov, (float)SHD_WIDTH / (float)SHD_HEIGHT, 1.0, farZ);
  gluLookAt(lightPos[0], lightPos[1], lightPos[2], 0.0, 0.0, 0.0, 0.0, 0.0, 1.0);

  //設定したモデルビュー行列を保存しておく(setTextureMatrixで使用する) 
  glGetFloatv(GL_MODELVIEW_MATRIX, modelview);

  //デプスバッファの内容だけを取得するので
  //フレームバッファには書き込まない
  glColorMask(0, 0, 0, 0);
  //デプスバッファには背面の奥行きを記録する
  glCullFace(GL_FRONT);
  //デプスマップ作成のためにシーンを描画
  draw0();
	draw1();
  drawGround();
  // デプスバッファの内容をテクスチャメモリに転送 
  glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 0, 0, SHD_WIDTH, SHD_HEIGHT, 0);

	//ステップ2
  //通常の描画設定に戻す 
  resize(width, height);

  glColorMask(1, 1, 1, 1); //フレームバッファへ書き込み許可
  glCullFace(GL_BACK);//背面は描画しない
	//カラーバッファのクリア
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();//視点を変えるときはこの位置に必要
  if(cos(view.theta*M_PI/180.0) >= 0.0)// <= 90.0)//カメラ仰角90度でビューアップベクトル切替
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, 1.0, 0.0);
  else
	  gluLookAt(view.pos[0], view.pos[1], view.pos[2], view.cnt[0], view.cnt[1], view.cnt[2], 0.0, -1.0, 0.0);

	//光源設定//'l'を押した後光源位置可変
  glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

  glActiveTexture(GL_TEXTURE1);
  glBindTexture(GL_TEXTURE_2D, texName[0]);
  glActiveTexture(GL_TEXTURE2);
  glBindTexture(GL_TEXTURE_2D, texName[1]);
  glActiveTexture(GL_TEXTURE3);
  glBindTexture(GL_TEXTURE_2D, texName[2]);
  glActiveTexture(GL_TEXTURE4);
  glBindTexture(GL_TEXTURE_2D, texName[3]);
  glActiveTexture(GL_TEXTURE5);
  glBindTexture(GL_TEXTURE_2D, texName[4]);
  glActiveTexture(GL_TEXTURE6);
  glBindTexture(GL_TEXTURE_2D, texName[5]);

 //描画
  glUseProgram(shaderProg);
  // シェーダプログラムの適用 
  glActiveTexture(GL_TEXTURE0);
  GLint texLoc = glGetUniformLocation(shaderProg, "shadowMap");
  glUniform1i(texLoc, 0);//GL_TEXTURE0を適用
  GLint texColorLoc = glGetUniformLocation(shaderProg, "colorMap");
  GLint texNormalLoc = glGetUniformLocation(shaderProg, "normalMap");

  glUniform1i(texColorLoc, 1);//GL_TEXTURE1を適用
  glUniform1i(texNormalLoc, 4);//GL_TEXTURE4を適用
	draw0(); 
  glUniform1i(texColorLoc, 2);//GL_TEXTURE2を適用
  glUniform1i(texNormalLoc, 5);//GL_TEXTURE5を適用
	draw1();
  glUniform1i(texColorLoc, 3);//GL_TEXTURE3を適用
  glUniform1i(texNormalLoc, 6);//GL_TEXTURE6を適用
  drawGround();

  // シェーダプログラムの適用を解除	
  glUseProgram(0);

	drawLight();//光源の描画

  //回転角度更新
  ang += dang;
  if(ang >= 360.0)
  {
		time2 = timeGetTime();
		drawTime = (time2 - time1) * 0.001;
		frame = (360.0 / dang) / drawTime;
		printf("フレーム数 = %4.2f[fps] \n", frame);
		//フレームあたりの描画時間
		drawTime = 1.0 / frame;
		printf("描画時間 = %4.5f[spf] \n", drawTime);		
		ang = 0.0;
  }

	if(flagHelp)
  {
		printf("矢印キーによるアフィン変換/光源移動 \n");
		printf(" →,←:x軸 \n");
		printf(" ↑,↓:y軸 \n");
		printf(" [Shift]+↑,↓:z軸 \n");
		printf(" 'r'を押した後:回転 \n");
		printf(" 't'を押した後:平行移動 \n");
		printf(" 's'を押した後:スケーリング \n");
		printf(" 'l'を押した後、光源位置の移動可 \n");
		printf(" マウス操作で視点変更可 \n");
		printf("  dolly:中央付近を左ボタンクリックで近づき,右ボタンクリックで遠ざかる \n");
		printf("  pan:左横および右横を右ボタンクリックで注視点が左右に変化する \n");
		printf("  tilt:真上および真下を右ボタンクリックで注視点が上下に変化する \n");
		printf("  tumble:左右にドラッグすると視点が左右に変化する \n");
		printf("  crane:上下にドラッグすると視点が上下に変化する \n");
		printf("  zoom:左下を右ボタンクリックでズームイン \n");
		printf("        右下を右ボタンクリックでズームアウト \n");
		printf("[Shift]+'r'でリセット \n");
		printf("[F1]キー:凹凸反転 \n");
		printf("[F2]キー:勾配強調 \n");
		printf("[F3]キー:シャドウマッピングの視野角調整 \n");
		printf("[F4]キー:シャドウマッピングの後方クリップ面調整 \n");
		printf("[Page Up]キー:回転角度+0.1 \n");
		printf("[Page Dn]キー:回転角度-0.1 \n");
		flagHelp = false;
  }
  //終了
  glutSwapBuffers();
}