gluPickMatrix(3) ピッキング領域を定義する

書式

void gluPickMatrix( GLdouble x,


GLdouble y,
GLdouble delX,
GLdouble delY,
GLint *viewport )

delim $$

引き数

x, y
ピッキング領域の中心をウィンドウ座標で指定する。
delX, delY
ピッキング領域の幅と高さをウィンドウ座標で指定する。
viewport
現在のビューポートを指定する(glGetIntegerv で得られる形式で指定)。

説明

gluPickMatrix は、描画をビューポートの小領域に制限するために 使える射影行列を作る。 この関数は普通、カーソル付近に描画されたオブジェクトを調べる際に 使える。 まず、gluPickMatrix を使って描画をカーソル回りの小領域に制限 する。 次に、(glRenderMode を使って)セレクションモードに入ってから シーンを再描画する。 するとカーソルの近くに描画された全てのプリミティブが識別され、 セレクションバッファに格納される。

gluPickMatrix が作った行列には現在の行列が掛けられる。 これは得られた行列を引き数に glMultMatrix を呼んだときと同様の 動作である。 作ったピッキング行列を効率的に使うためには、最初に glLoadIdentity を呼んで単位行列を透視射影行列スタックにロード しておく。 そして次に gluPickMatrix を呼び、最後にコマンド (gluPerspective 等)を呼び出して透視射影行列にピッキング行列を 掛ける。

gluPickMatrix を使って NURBS をピックする時には、 NURBS の GLU_AUTO_LOAD_MATRIX 属性はオフにしておくこと。 GLU_AUTO_LOAD_MATRIX 属性がオフでなければ、 レンダリングされる全ての NURBS 曲面は、ピッキング行列がない時と ピッキング行列がある時で分割のされかたが異なる。

使用例

シーンを次のように描画する場合を考える:

glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(...); glMatrixMode(GL_MODELVIEW);

ビューポート部分をピッキング領域としてセレクション操作できるようにする には、次のようにする:

glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPickMatrix(x, y, width, height, viewport); gluPerspective(...); glMatrixMode(GL_MODELVIEW);