- 140 名前:131 mailto:sage [03/11/27 12:45]
- たぶんこんな手順になります。(順番重要)
当たり前だったら申し訳ない。 ・セレクション glGetIntegerv(GL_VIEWPORT,vp); // ビューポート変数を取得 glSelectBuffer(BUFFER_SIZE,sb); //セレクションバッファをセット glRenderMode(GL_SELECT); // セレクションモードに切り替え glInitNames(); // セレクションバッファを初期化 glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentify(); // 投影変換マトリクスの保存と初期化 gluPickMatrix(mx,vp[3]-my,pixel,pixel,vp); // セレクション領域が(mx,my)近辺(pixel の範囲)になるように投影変換マトリクスを設定 set_projection(); // 好みの投影変換マトリクスを設定。glFrustum など。 glMatrixMode(GL_MODELVIEW); // モデルビューモードに切り替え draw(GL_SELECT); // 描画。セレクトしたいものをPushName。gluLookAtやglTranslatefなども含む。 glMatrixMode(GL_PROJECTION); glPopMatrix(); // 投影変換マトリクスを元に戻す glMatrixMode(GL_MODELVIEW); // ビューイング変換マトリクスに切り替えておく glPopName(); // ネームスタックをクリア GLint hits = glRenderMode(GL_RENDER); // セレクション完了 ・実際の描画 glMatrixMode(GL_PROJECTION); glLoadIdentify(); // 投影変換マトリクスの初期化 (*1) glMatrixMode(GL_MODELVIEW); // モデルビューモードに切り替え (*1) draw(GL_RENDER); // 描画 # ただし (*1) のところは普通はウィンドウサイズが変化したときなどに呼ぶようにする。
|

|