書式
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