気楽に、気ままに、てげてげに。
こんにちは、いつもGLSharpのお世話になっております。現在、このライブラリを用いてツールを作成しています。[MQOViewre.cs]を改造しているのですが、マウスピッキングを用いてのヒット座標取得の場所にて正常な値を取得できません。座標がカメラをズームやアウトするたびに変わります。(サンプルのトンボでも同様でした)GLSharp5.4_Demoでも同様な現象が起きますのでご確認よろしくおねがいします。
おっしゃるような現象は確認できましたが、計算方法が間違っているわけではなくて、デプス値の誤差が原因のようですね。解決策としては、プロジェクション行列を設定する際に、gluPerspective()またはCameraのzFar, zNearを適切な(大きすぎない)範囲にうまく設定する必要があります。表示するオブジェクトの大きさを元にして動的に設定するような、少々凝った工夫をする必要がありそうです。
調査ありがとうございます。cam.zFar = 1300f;cam.zNear = 30f;にした結果、かなり改善はされましたが、0.03f程度の誤差が残ってしまいます。(0.03程度の誤差なら大丈夫だとは思いますが・・・)こちらでつかっているメタセコのマップが[5000.f]くらいのサイズになっており、これ以上Farを減らすことはできなくなっています。後はNearをオブジェクトの距離におおじて変化させることを試してみます。何かいい方法がありましたらご教授してくださると助かります。このライブラリは大変扱いやすいのでこれからも頑張ってください。このたびはありがとうございました。
コメントを投稿
3 件のコメント:
こんにちは、いつもGLSharpのお世話になっております。
現在、このライブラリを用いてツールを作成しています。
[MQOViewre.cs]を改造しているのですが、マウスピッキングを用いてのヒット座標取得の場所にて正常な値を取得できません。
座標がカメラをズームやアウトするたびに変わります。(サンプルのトンボでも同様でした)
GLSharp5.4_Demoでも同様な現象が起きますので
ご確認よろしくおねがいします。
おっしゃるような現象は確認できましたが、
計算方法が間違っているわけではなくて、
デプス値の誤差が原因のようですね。
解決策としては、プロジェクション行列を設定する際に、
gluPerspective()またはCameraのzFar, zNearを
適切な(大きすぎない)範囲にうまく設定する
必要があります。
表示するオブジェクトの大きさを元にして
動的に設定するような、少々凝った工夫をする
必要がありそうです。
調査ありがとうございます。
cam.zFar = 1300f;
cam.zNear = 30f;
にした結果、かなり改善はされましたが、0.03f程度の誤差が残ってしまいます。
(0.03程度の誤差なら大丈夫だとは思いますが・・・)
こちらでつかっているメタセコのマップが[5000.f]くらいの
サイズになっており、これ以上Farを減らすことはできなくなっています。
後はNearをオブジェクトの距離におおじて変化させることを試してみます。
何かいい方法がありましたらご教授してくださると助かります。
このライブラリは大変扱いやすいのでこれからも頑張ってください。
このたびはありがとうございました。
コメントを投稿