Example 5-9 はライトの色を変更するサンプルです。
以下のURLを開き、「Example 5-9 :」で検索して下さい。
Chapter 5 - OpenGL Programming Guide
http://www.glprogramming.com/red/chapter05.html
【手順】
1. こちらと同様にプロジェクトを作成し、 main.c の中身を Example 5-9 のものと入れ替えて下さい。
2. #include の変更。以下の様に変更して下さい。
#include#include #include "glut.h" ↓ #include #include #include
3. このサンプルではマウス真ん中のボタンをクリック使用します。Macは標準でサポートしない(右クリックみたいキーボードとの組み合わせで使えたりとかするのだろうか?)のこの部分をキーボードでの操作に変更します。
[main()関数からの呼び出し部分の変更]
glutMouseFunc(mouse); ↓ glutKeyboardFunc(keyboard);
[キーボード入力処理用の関数を追加]
mouse()関数を削除し、以下の関数を追加。
void keyboard (unsigned char key, int x, int y) { switch (key) { case 'z': diffuseMaterial[0] += 0.1; if (diffuseMaterial[0] > 1.0){ diffuseMaterial[0] = 1.0; } glColor4fv(diffuseMaterial); glutPostRedisplay(); break; case 'Z': diffuseMaterial[0] -= 0.1; if (diffuseMaterial[0] < 0.0){ diffuseMaterial[0] = 0.0; } glColor4fv(diffuseMaterial); glutPostRedisplay(); break; case 'x': diffuseMaterial[1] += 0.1; if (diffuseMaterial[1] > 1.0) diffuseMaterial[1] = 1.0; glColor4fv(diffuseMaterial); glutPostRedisplay(); break; case 'X': diffuseMaterial[1] -= 0.1; if (diffuseMaterial[1] < 0.0) diffuseMaterial[1] = 0.0; glColor4fv(diffuseMaterial); glutPostRedisplay(); break; case 'c': diffuseMaterial[2] += 0.1; if (diffuseMaterial[2] > 1.0) diffuseMaterial[2] = 1.0; glColor4fv(diffuseMaterial); glutPostRedisplay(); break; case 'C': diffuseMaterial[2] -= 0.1; if (diffuseMaterial[2] < 0.0) diffuseMaterial[2] = 0.0; glColor4fv(diffuseMaterial); glutPostRedisplay(); break; } printf("R=%f G=%f B=%f\n", diffuseMaterial[0], diffuseMaterial[1], diffuseMaterial[2]); }
※printf()のwarningが気になる人は先頭に #include
4. ビルドし、実行。以下のキーワードでライト(ディフューズ)の色を変更。
RGBそれぞれを加減でき、0.0〜1.0の範囲を取る。0.0でその要素を全く含まない。1.0で最大発光。
z : Rの値を +1.0。 Z : Rの値を -1.0。 x : Gの値を +1.0。 X : Gの値を -1.0。 c : Bの値を +1.0。 C : Bの値を -1.0。