現在地 >> メニュー >> 基本編04 >> 複数の物体操作

次 >> まとめコード::基本編04 >> 基本編05

複数の物体を操作する時


複数の物体を操作する時は注意が必要である。

例えば、

void display()
{
	... ...
	glTranslated(1,0,0);
	   [描画物A]
	glRoteted(45,0,1,0);
	   [描画物B]
	... ...
}

のように記述した場合、

描画物Aは

    glTranslated(1,0,0);
    [描画物A]

という事であり、一方描画物Bは

    glTranslated(1,0,0);
    glRoteted(45,0,1,0);
    [描画物B]

と等しい。

つまり、
何も設定しなければ、アフィン変換は描画した物体すべてに影響する
という事である。

対処方法


複数の物体にそれぞれ独立してアフィン変換したい場合は、
「一時的に現在の行列の状態を退避させる」
と必要がある。


― やり方 ―
  1. glPushMatrix()で行列の退避
  2. アフィン変換
  3. 物体描画
  4. glPopMatrix()で行列を元にもどす

[例]

void display()
{
	... ...
	glPushMatrix();   //行列退避
	glTranslated(1,0,0);
	   [描画物A]
	glPopMatrix(); //行列を戻す

	glPushMatrix();   //行列退避
	glRoteted(45,0,1,0);
	   [描画物B]
	glPopMatrix();//行列を戻す

	... ...
}


これによって、
 描画物Aは並行移動のみ、
 描画物Bは回転のみ
の操作となる。


次 >> まとめコード::基本編04 >> 基本編05

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます