強火で進め

このブログではプログラム関連の記事を中心に書いてます。

Macでの「The OpenGL Programming Guide」のサンプルの実行方法の解説をザックリと行う(12)

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。