トップページ > 記事閲覧
CheckCameraViewClip関数の不具合?
名前:ゆーすけ 日時: 2014/12/23 09:47

短期間での連投すみません。 カメラの視界内に入っているはずの点がCheckCameraViewClip関数で見えていないと 判定される現象が起こっています。 不具合発生の条件を以下に列挙します。 座標は全てVECTOR_D型変数です。 カメラ PosCam.x = -3156519.9384031855 PosCam.y = 4090284.2156257224 PosCam.z = 4080196.3565707412 注視点 PosGaze.x = -3096173.4282031762 PosGaze.y = 4088144.4741291157 PosGaze.z = 4040436.5394293307 指定点(注視点に同じ) Pnt.x = -3096173.4282031762 Pnt.y = 4088144.4741291157 Pnt.z = 4040436.5394293307 カメラのセッティング DX.SetCameraPositionAndTargetAndUpVecD(PosCam, PosGaze, DX.VNormD(PosGaze)) DX.SetupCamera_PerspectiveD(45 * π/180) DX.SetCameraNearFarD(50000, 100000) 実際に指定点がカメラから見えていることの確認 DX.DrawSphere3DD(Pnt, 10000, 16, 16777215, 16777215, DX.FALSE) 関数による判定 OutSight = DX.CheckCameraViewClip(DX.VConvDtoF(Pnt)) If (OutSight = DX.FALSE) Then DX.DrawString(0, 0, "見える", 16777215) Else DX.DrawString(0, 0, "見えない", 16777215) End If ↑このような形のサンプルプログラムを書いてみたところ、画面中央には確かにワイヤーフレームの 白い球体がはっきり見えているにも関わらず、画面左上には「見えない」と表示されています。 (CheckCameraViewClip関数は指定点がカメラの視界に入っている場合はFALSEを返すのですよね?) 関数自体の不具合かもしれませんのでよろしければ確認をしていただけないでしょうか?
メンテ

Page: 1 |

Re: CheckCameraViewClip関数の不具合? ( No.1 )
名前:管理人 日時:2014/12/23 13:53

載せて頂いた方法で確認しましたが、私の環境では「見える」と表示されました 何故私の環境で結果が異なったのかは分かりませんが、とりあえず CheckCameraViewClip に VECTOR_D 版の CheckCameraViewClipD が無かったので追加しました 恐らく精度が原因だと思いますので、よろしければお試しになってみてください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用
メンテ
Re: CheckCameraViewClip関数の不具合? ( No.2 )
名前:ゆーすけ 日時:2014/12/23 14:57

ありがとうございます。 先ほどVECTOR_D版で試してみましたがやはり「見えない」と表示されました。 別のプログラムでは指定点がカメラの向いている向きと逆向きにいるにも関わらず 見えると判定されていますし・・・ 同じ条件で結果が変わってくるのは謎ですが、とりあえずこのまま使うしかなさそうですね。
メンテ
Re: CheckCameraViewClip関数の不具合? ( No.3 )
名前:管理人 日時:2014/12/23 17:01

駄目でしたか・・・・ 勘ですが、マルチスレッドが原因だったりしないでしょうか? シングルスレッドで動作させたらそちらの現象が発生しなくなったり・・・
メンテ
Re: CheckCameraViewClip関数の不具合? ( No.4 )
名前:ゆーすけ 日時:2014/12/23 17:42

サンプルプログラムの方はシングルスレッドなので、おそらくですが描画処理を別スレッドにしたのは 直接の原因ではないと思います。 元々作成していた本プログラムで上記の現象が起こったためにそれを検証する目的で作ったサンプルなので・・・ 本プログラムでの描画処理の別スレッド化についても、その後テスト中に描画処理が完全にフリーズする現象が 不定期に発生して原因が全く分からないので、結局描画処理の別スレッド化は泣く泣く諦めました(汗 動く時は普通に動いているだけに初心者の自分には謎だらけです。 ともあれ初期の3Dソフトなんかは多少の表示上のバグはつきものでしたしプログラム上致命的な問題でもないので、 とりあえずはこのまま進めていくことにします。 お付き合いくださりありがとうございました。
メンテ
Re: CheckCameraViewClip関数の不具合? ( No.5 )
名前:管理人 日時:2014/12/25 00:51

マルチスレッドが原因ではありませんでしたか・・・ もしよろしければ検証用に作成されたVB2010のプロジェクトをメールで BQE00322(あっとまーく)nifty.com ( (あっとまーく)を@に置き換えてください ) に送っていただけないでしょうか? もしそれで私の環境でも「見えない」となれば、私の方で原因を調べることができると思いますので
メンテ
Re: CheckCameraViewClip関数の不具合? ( No.6 )
名前:ゆーすけ 日時:2014/12/26 21:41

管理人様 先ほどVB2010のプロジェクトフォルダをzipファイルにまとめてメールで送付しました。 お手数でなければ確認していただければと思います。 (Yahooのフリーメールアドレスで送ったのでひょっとしてブロックされるかも・・・) それではよろしくお願いします。
メンテ
Re: CheckCameraViewClip関数の不具合? ( No.7 )
名前:ゆーすけ 日時:2014/12/26 23:37

すみません。 今確認したらエラーで戻ってきてました・・・ どうもメッセージのサイズが大きすぎて怒られているようです。 添付ファイルのサイズは4MBちょっとなのですが(汗
メンテ
Re: CheckCameraViewClip関数の不具合? ( No.8 )
名前:管理人 日時:2014/12/27 23:51

DxLib.dll や DxLib_x64.dll はこちらで調達できるので、それらを外せば容量制限をクリアできる、 ということはないでしょうか・・・? あと、もし中身が見られても不都合がありませんでしたらこちらのような簡単なアップローダに アップしていただけないでしょうか? <どっとうpろだ.org> http://www.dotup.org/
メンテ
Re: CheckCameraViewClip関数の不具合? ( No.9 )
名前:ゆーすけ 日時:2014/12/28 10:41

先ほどうpろだにアップしましたので確認をお願いします。 URLは書き込み禁止文字列に引っ掛かって書き込めないので、こちらの77217.zipをダウンロードしていただければと思います。 それではよろしくお願いします。
メンテ
Re: CheckCameraViewClip関数の不具合? ( No.10 )
名前:管理人 日時:2014/12/29 09:55

ありがとうございます、アップしていただいたファイルを拝見しました 「見えてない」になる原因はカメラの設定がリセットされていたからでした こちらのスレッドの最初に書き込んでいただいたプログラムではカメラ設定を行い 球を描画した直後に CheckCameraViewClip を使用していますが、 アップしていただいたプログラムでは球を描いた後 SetDrawScreen で描画先を裏画面にしています SetDrawScreen を実行するとカメラの設定がリセットされてしまうので、その後に CheckCameraViewClipD を使用するとリセットされたカメラ設定での判定になるので、 「見えてない」になってしまうというわけです アップしていただいたプログラムの CheckCameraViewClipD を使用する前の箇所に DX.SetCameraPositionAndTargetAndUpVecD(PosCam, PosGaze, DX.VNormD(PosGaze)) DX.SetupCamera_PerspectiveD(45 * D2R) DX.SetCameraNearFarD(50000, 100000) をコピー&ペーストして実行したところ、「見えてる」になりましたので、よろしければお試しください m(_ _)m
メンテ
Re: CheckCameraViewClip関数の不具合? ( No.11 )
名前:ゆーすけ 日時:2014/12/29 15:49

サンプルがうまく動かない原因はそれでしたか・・・お恥ずかしい限りです。 実は本来のプログラムの方も正常に動いていないのですが(事前にカメラの設定はやっているはず)、先ほどデバッグして確認してみたら CheckCameraViewClipDは正常な値を返しているようでしたがその後の処理がこちらの意図した結果になっていないようです。 やむなく荒っぽい方法としてカメラ→注視点のベクトルとカメラ→対象オブジェクトのベクトルの内積をとって角度のコサインを求め、 それが閾値以下なら視界にいないと判定するようにして実装したらとりあえず狙い通りの動作をするようになりました。 CheckCameraViewClipD関数が正常なのに結果がおかしくなる原因は謎ですが、今回は実装を変えて凌ぐことにします。 疑いをかけてしまって申し訳ありません(汗
メンテ
Re: CheckCameraViewClip関数の不具合? ( No.12 )
名前:管理人 日時:2014/12/30 01:51

> CheckCameraViewClipD関数が正常なのに結果がおかしくなる原因は謎ですが、今回は実装を変えて凌ぐことにします。 > 疑いをかけてしまって申し訳ありません(汗 表現が微妙な感じですが、意図した通りの処理ができたということで何よりです (・・; 実用上の問題が発生しましたら、またお訊ねください
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存