OpenGLスレ Part 3
■ このスレッドは過去ログ倉庫に格納されています
0140131
NGNG当たり前だったら申し訳ない。
・セレクション
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) のところは普通はウィンドウサイズが変化したときなどに呼ぶようにする。
■ このスレッドは過去ログ倉庫に格納されています