void init(void) { glClearColor (0.2, 0.2, 0.8, 0.0); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); //texName is global glGenTextures(6, texName); for ( int i = 0; i < 6; ++i ) { GLubyte *texImage = makeTexImage( maps[i] ); if ( !texImage ) { printf("\nError reading %s \n", maps[i] ); continue; } glBindTexture(GL_TEXTURE_2D, texName[i]); //now we work on texName glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texImageWidth, texImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, texImage); delete texImage; //free memory holding texture image } }
// Initializes texture information void init(void){ glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); makeTexImage(); /* Specifies the alignment requirement */ glPixelStorei(GL_UNPACK_ALIGNMENT, 1); /* Sets the wrap parameters in both directions */ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /* Sets the magnifying and minifying parameters */ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); /* Specifies a two-dimensional texture image */ glTexImage2D(GL_TEXTURE_2D, 0, 4, ourImageWidth, ourImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, ourImage); /* Set texture environment parameters */ glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); pic = LoadTex(name); }
void makeTexture() { glGenTextures(6, texName); Bitmap* bm0 = new Bitmap(); loadBitmap(bm0, "../../bmp/disk4.bmp"); makeTexImage(bm0); setColorMap(0); makeNormalMap(bm0); setNormalMap(0); loadBitmap(bm0, "../../bmp/brick2.bmp"); makeTexImage(bm0); setColorMap(1); makeNormalMap(bm0); setNormalMap(1); loadBitmap(bm0, "../../bmp/stones1.bmp"); makeTexImage(bm0); setColorMap(2); makeNormalMap(bm0); setNormalMap(2); }
void init(void) { //背景色 glClearColor(0.2, 0.2, 0.3, 1.0); setCamera();//視点を求める setLight(); //光源設定 glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); glEnable(GL_SMOOTH); printf("マウス/キー操作の説明には'h'キーをプッシュ \n"); //テクスチャー Bitmap* bm = new Bitmap(); loadBitmap(bm, "../../bmp/tiger2.bmp"); makeTexImage(bm); setTexture(); }
void init(void) { //背景色 glClearColor(0.2, 0.2, 0.3, 1.0); setCamera();//視点を求める setLight(); //光源設定 glEnable(GL_DEPTH_TEST); glEnable(GL_NORMALIZE); printf("マウス/キー操作の説明には'h'キーをプッシュ \n"); //時間関係 lastTime = timeGetTime(); fps = 0; elapseTime1 = 0.0;//1sec間以内の経過時間 elapseTime2 = 0.0; //init()後の総経過時間 makeWavePlane(amp, elapseTime2); makeTexImage(); setTexture(); }
void display(void) { //時間計測 curTime = timeGetTime(); float dt = (float)(curTime - lastTime) * 0.001;//secに変換 elapseTime1 += dt; elapseTime2 += dt; fps ++; printf("elapseTime2 = %f \n", elapseTime2); if(elapseTime1 >= 1.0) { printf("frame per sec = %d \n", fps); elapseTime1 = 0.0; fps = 0; } lastTime = curTime; //波データを作成し、投影マップを設定 if(kindWave == 0) makeWaveCircle(amp, elapseTime2); else if(kindWave == 1) makeWavePlane(amp, elapseTime2); else makeWaveMix(amp, elapseTime2); makeTexImage(); setTexture(); if(flagWireframe)//'w'でwireframeとsolid model切り替え { glPolygonMode(GL_FRONT,GL_LINE); glPolygonMode(GL_BACK,GL_POINT); } else glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); resize(width, height); //カラーバッファのクリア glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 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); //fragment shaderのユニフォーム変数インデックスを取得 GLint texLoc = glGetUniformLocation(shaderProg, "smplCaustics"); glUniform1i(texLoc, 0);//GL_TEXTURE0を適用 // シェーダプログラムの適用 glUseProgram(shaderProg); //描画 fish1.motion1(elapseTime2); fish2.motion1(elapseTime2); drawFloor0(10.0, 10.0, 10, 10); // シェーダプログラムの適用を解除 glUseProgram(0); //テクスチャ、半透明物体があるとき glDepthMask(GL_FALSE); //デプスバッファを書き込み禁止 glEnable(GL_BLEND);//アルファブレンディングを有効にする glBlendFunc(GL_DST_ALPHA,GL_ONE_MINUS_SRC_ALPHA);//色混合係数を決める //半透明描画 drawWave(); //テクスチャ、半透明物体があるとき glDepthMask(GL_TRUE); //デプスバッファの書き込みを許可 glDisable(GL_BLEND); //影 drawShadow(); drawLight(); if(flagHelp) { printf("矢印キーによる光源/投影中心移動 \n"); printf(" →,←:x軸 \n"); printf(" ↑,↓:y軸 \n"); printf(" [Shift]+↑,↓:z軸 \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("[F1]キー:投影マッピングの視野角fovの増減 \n"); printf("[F2]キー:波の振幅amp \n"); printf("[F3]キー:波の種類(円形波と平面波)の切り替え \n"); printf("[F4]キー:円形波の個数切り替え \n"); flagHelp = false; } //終了 glutSwapBuffers(); }