トップページ > 過去ログ > 記事閲覧
指定のポリゴンが表面か裏面かの取得
名前:黒猫96 日時: 2012/07/31 21:05

管理人様、とても使いやすいライブラリの開発、公開ありがとうございます。 現在3Dゲームの開発をしていて、行き詰った点があるので質問をさせてもらいたいと思います。 カメラから見た指定のポリゴンが表面か裏面か、という情報を取得したいのですが上手くいかずに困っています。 自分で色々調べた結果、ポリゴンの頂点がスクリーンに向かって反時計回りに並んでいる場合が表、という情報を見つけたので ポリゴンの頂点の座標をそれぞれ”ConvWorldPosToScreenPos”関数でスクリーン座標に置き換え、 その座標を元に判定というプログラムを作成しました。 しかしカメラがポリゴンから離れている場合は上手く行っている様なのですが、 ”ConvWorldPosToScreenPos”の仕様(指定のワールド座標とカメラの視線方向との距離が SetCameraNearFar で設定した範囲から外れていた場合、X、Yはスクリーン座標とは無関係の値となる) により、ポリゴンの頂点のうち1つ以上がカメラの後ろにある場合、正しく判定が出来ないようです。 どなたか良い解決策がありましたら、ご教授願えると助かります。

Page: 1 |

Re: 指定のポリゴンが表面か裏面かの取得 ( No.1 )
名前:埴輪 日時:2012/08/01 08:32

表示されない場合、 スクリーン座標に変換するしたときの座標のz成分は 0.0以下もしくは1.0以上になり、 結果は無効だそうです(リファレンス参照) 問題のポリゴンの法線ベクトルと、カメラの方向ベクトルの内積をとり 正の値になれば裏面、不の値になれば表面。 という判断ができると思います。 モデルなら参照用メッシュ関数(MV1GetReferenceMeshなど)で取得できるようです。

Page: 1 |