現在地 >> メニュー >> 基本編16 >> 基本編16::gluUnProject()
関連:基本編16::gluProject()


gluUnProject()


gluUnProject()関数は、ウィンドウ座標からオブジェクト座標を求める関数である。


GLint gluUnProject( 
		GLdouble winX, //ウィンドウ座標のX,Y
		GLdouble winY,
		GLdouble winZ, //デプスバッファの値
		const GLdouble *model, //モデルビュー行列
		const GLdouble *proj, //透視投影行列
		const GLint *view, //ビューポート
		GLdouble* objX,  //オブジェクト座標の格納場所(X,Y,Z)
		GLdouble* objY,
		GLdouble* objZ )


使い方


gluUnProject()関数に必要なものは

  • ウィンドウ座標(X,Y)
  • デプスバッファの値 → glReadPixels()などで「GL_DEPTH_COMPONENT」を取得
  • モデルビュー行列、透視投影行列、ビューポート
  • オブジェクト座標の格納場所

である。

[例]:ウィンドウ座標で(50,50)にある物体のオブジェクト座標を推定

	double modelview[16];
	glGetDoublev(GL_MODELVIEW_MATRIX, modelview);

	double projection[16];
	glGetDoublev(GL_PROJECTION_MATRIX, projection);

	int viewport[4];
	glGetIntegerv(GL_VIEWPORT, viewport);

	float z;
	double objX;
	double objY;
	double objZ;

	glReadPixels(50,WindowHeight - 50,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,&z);

	gluUnProject(50,WindowHeight - 50,z,modelview,projection,viewport,&objX,&objY,&objZ);


「glReadPixels()関数」、「gluUnProject()関数」は左「下」原点。
ウィンドウ座標は、左「上」原点となっているため、
上下を反転する必要がある。(例はWindowの高さから引いている)


サンプルコード >> 基本編16::まとめコード2



メモ
gluUnProject()関数は、呼ばれる度に「逆行列」を計算する。
従って、この関数を何度も使う場合は、自分で作った方が効率的な可能性がある。

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






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


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

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