gluProject(3) オブジェクト座標系をウィンドウ座標系にマップする

書式

GLint gluProject( GLdouble objX,


GLdouble objY,
GLdouble objZ,
const GLdouble *model,
const GLdouble *proj,
const GLint *view,
GLdouble* winX,
GLdouble* winY,
GLdouble* winZ )

delim $$

引き数

objX, objY, objZ
オブジェクト座標を指定する。
model
現在のモデルビュー行列を指定する(glGetDoublev 関数で得られる形式)。
proj
現在の射影行列を指定する(glGetDoublev 関数で得られる形式)。
view
現在のビューポートを指定する(glGetIntegerv 関数で得られる形式)。
winX, winY, winZ
算出されたウィンドウ座標が返される。

説明

gluProject は指定されたオブジェクト座標を、 model, proj, view を使ってウィンドウ座標に変換する。 変換結果は winX, winY, winZ に格納される。 返り値 GL_TRUE は成功を表し、返り値 GL_FALSE は 失敗を表す。

座標を計算は次のように行う。 まず $v ~=~ ("objX", "objY", "objZ", 1.0)$ で 4 行 1 列の行列を作る。 次に gluProject で $v sup prime$ を次のように計算する:

v sup prime ~=~ P ~times~ M ~times~ v

ここで、$P$ は現在の射影行列 proj, $M$ は現在の モデルビュー行列 model である(どちらも $4 times 4$ 行列で、 列要素が連続の配列となる)。 '$times$' は行列の積を表す。

すると、ウィンドウ座標は次のように算出される:

"winX" ~=~ "view" (0) ~+~ "view" (2) ~*~ (v sup prime (0) ~+~ 1)~/~2

"winY" ~=~ "view" (1) ~+~ "view" (3)~*~(v sup prime (1) ~+~ 1)~/~2 .EN

"winZ" ~=~ (v sup prime (2) ~+~ 1)~/~ 2