カテゴリ
最近の記事
管理人
kappa-s.jpg
名前:nyatto
twitter:http://twitter.com/nyattoh
Facebook:http://www.facebook.com/nyattoh
FBレター:http://fb-letter.com/100002151358967.html
一言:

持ち前の中途半端さが全面に出ています。
あんまり突っ込まれるとぐぅの根も出ませんが、
何かあったらお気軽に書き込んでください。

コメントはスパム対策で一部ですが承認制にしてある記事があります。ご了承下さい。
ツイッター始めました。
Facebookの情報をメールでお届けします

内藤
過去ログ
リンク集
□個人的リンク
VabooLog2011
異邦人の食卓
アラフォー男子のウチのゴハン
アートルーム ヘアビジョン
Look at me.
本と文化の街 スーパー源氏
(古本・書籍検索ポータル)


■相互リンク
・「eguegu-Photo
・「詠う鯨
・「電脳生活で健康維持
・「やくにたたない?PCブログ
・「ジャパネットたかたの通販ガイド

■メーカ
NEC
SHARP
ソニースタイル
TOSHIBA
富士通
Panasonic
日立
エプソンダイレクト
Lenovo
日本hp
Dell
ソーテック
オンキヨー
ASUS Shop

■BTO・パーツ屋
グットウィル
韋駄天PC Online Shopping
エーチャージ
クレバリー
サイコム
TWOTOP
ドスパラ
ハーキュリーズ
パソコン工房
T・ZONE
VSPEC
フェイス
BLESS
フロンティア
マウスコンピューター

■中古
ソフマップ中古販売
ソフマップ・ドットコム 買取りサイト

■ショッピングモール
Amazon
楽天
【Yahoo!ショッピング】おすすめ情報
ライブドアデパート

タグクラウド
TOP  >  プログラミング  > 

2008年05月26日

OpenGLで3D物体を選択するとき

このエントリーをはてなブックマークに追加
//
ものすごく久しぶりに必要になったのですっかり忘れていたことに愕然。
備忘録として書いておくことにしました。
自分用なので参考になるかどうかは不明です。

SelectionモードそのものについてはThe Official Guide to Learning OpenGL, Version 1.1にありますのでそちらを参照。

■流れ
1.Selectionモードで描画(nameスタックは2階層、物体番号・面番号としておく)
2.クリックされた物体(面)の数を取得
3.マウスクリックされた画面座標をワールド座標へ変換
4.視線ベクトル(gluLookAtの中心座標から視点座標を引いた方向ベクトル)とクリックされた面との交点を導く
5.交点を現在のカメラ座標系へ変換
6.交点のz座標値をそれぞれ比較して最大のz座標を持つ面を含む物体が選択物体となる

■もう少し詳しく
1について
・glRenderMode(GL_SELECT)での描画
クラス設計によりますが、物体を描画するときにカメラ座標系への変換行列を設定するのを忘れると痛い目に遭います。

・・・前略・・・
glRenderMode(GL_SELECT);
・・・中略・・・
glMatrixMode(GL_MODELVIEW);
gluLookAt(...); // ココ
DrawObject(); // 物体描画:描画処理中にgluLookAtがあれば上の行は不要

・nameスタックの件
glPushName(object-number);
ループ開始
 glPushName(face-number);
 ポリゴン描画
 glPopName();
ループ終了
glPopName();

という感じ。

3について
・クリックされた場所のZ座標について
ヒットした物体(面)があれば、glSelectBufferで指定したGLuint型配列にZ座標も格納されます。
The Official Guide to Learning OpenGL, Version 1.1に書いてあります。
上記の赤本にもサンプルがありますが、それを0x7fffffffで割った数が画面座標系でのZ座標です。
格納されるのは最大値と最小値なのですが、どちらを使ってもいいような・・・
で、それをワールド座標に変換するのはgluUnProject。

4について
・面と直線との交点
面の法線と当該直線との内積が0だと面と直線が平行、交点はありません(というか、それだとまず選択できない)のでどっかで間違いがあると思われます。

5について
・カメラ座標系への変換について
gluProjectでオーケー。

■まとめ
3Dだとめんどい。

 にほんブログ村 PC家電ブログ パソコン・周辺機器へ クチコミblogランキング TREview
タグ: 3D
posted at 00:05 | このブログの読者になる -| 更新情報をチェックする | Comment(0) | TrackBack(0) | プログラミング
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/97964466

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。