問題タブ [ray-picking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
457 参照

webgl - Three.js Picking Ray では、オブジェクトはどのように X,Z のみを移動しますか? Yではない

現在、オブジェクトはあらゆる方向に移動します。しかし、私はオブジェクトがYではなくXまたはZのみを動かしたい.

私はこれを試します。しかし、結果は良くありません。

MouseMove で

どうすればこの問題を解決できますか?

0 投票する
1 に答える
1125 参照

opengl - OpenGLで「ポイントオンハイトマップ」ピッキングを効率的に実装するにはどうすればよいですか?

高さマップとしてモデル化された世界の地面にあるOpenGLシーンのマウス座標を追跡したいと思います。現在、ハードウェアテッセレーションのような派手なものはありません。この質問はオブジェクトの選択に関するものではないことに注意してください。

現在、私は次のことを行っていますが、リードバック操作のためにパフォーマンスが明らかに低下しています。

  • 世界をレンダリングする(地面)
  • マウス座標での深度値を読み戻します
  • シーンの残りの部分をレンダリングします
  • バッファを交換して次のフレームをレンダリングします

地面の前にオブジェクトがない状態で地面の深さの値が必要なため、リードバックは2つのレンダリングステップの間にあります。これは、次のコマンドを使用して実行されます。

私のアプリケーションでは、フレームレートを1秒あたり60フレームに制限しています。リードバック操作なしでシーンをレンダリングすると、CPU使用率は5%未満になりますが、リードバックを実行すると、シーンのレンダリングやゲームモデルの更新にはあまり力を入れていませんが、約75%に増加します。またはそのようなもの。

一時的な解決策は、マウスの下のピクセルの深度値をキャッシュし、5フレームまたは10フレームごとにのみ更新することです。これにより、CPU使用率が10%未満に戻ります。しかし、明らかに問題の最善の解決策になることはできません。

ピッキング(サーフェス上の(浮動小数点)座標が必要なため、オブジェクトピッキングではない)を効率的に実装するにはどうすればよいですか?

バックバッファの代わりにフロントバッファの深度値を読み戻すことをすでに考えていましたが、その方法をグーグルで調べると、glRead*メソッドについて不満を言う人だけが最善の方法であることがわかります。しかし、(glRead *を使用して)何かを読まずに(ピッキングを行う)何かを読むにはどうすればよいですか?

よくわかりません。他の人はどのようにピッキングを実装しますか?


まったく異なるアプローチは、ソフトウェアで世界表面ピッキングを実装することです。カメラから「深さまで」3D光線を再構築することは大したことではありません。これは、ターゲットピクセルでレンダリングされる空間内のポイントを表します。次に、交差アルゴリズムを実装して、サーフェスの最前面のポイントを見つけることができます。

0 投票する
1 に答える
1228 参照

c++ - ピッキングレイは不正確です

このウェブサイトの指示に従って、ピッキング レイを実装しようとしています。

今のところ、私は基本的に地面をクリックして、私の小さなフィギュアがこのポイントに向かって歩くように命令できるようにしたいだけです. 私の地面は平らで、回転も平行移動もしていないので、y が 0 に達したときにピッキング レイの x 座標と z 座標を見つける必要があります。

これまでのところ、これは私が思いついたものです:

このpos時点で、ピッキング レイが地面に当たるポイントになると予想されます。しかし、試してみると、次のような結果が得られます: エラー (マウス カーソルは記録されませんでした) 地面にはテクスチャがないため見にくいですが、ほとんどの RTS ゲームのようにカメラが傾いています。Blender で遠く離れた人間に見える存在をモデル化するという哀れな試みは、私の計算によると交差が発生したポイントを示しています。

viewそのため、との間の変換がdir台無しになり、私の光線が間違った方向を向いてしまったようです。計算された位置と実際の位置の間のギャップは、画面の中心からマウスを離すほど大きくなります。

私はそれを発見しました:

  • HEIGHT と LENGTH は正確ではありません。Windows は境界線のために数ピクセルを切り取るので、ウィンドウの解像度として 1006,728 を使用する方が正確です。多少のズレはあると思います。
  • fovy を 45 から約 78 に上げると、かなり正確な光線が得られます。だから、私がフォービーとして使っているものに何か問題があるのか​​もしれません。私は明示的に呼び出してglm::perspective(45.f, 1.38f, 0.1f, 500.f)います(それぞれ fovy、アスペクト比、fNear、fFar)。

だからここで私は迷っています。正確な光線を取得するにはどうすればよいですか?

PS: これを実装した関数やライブラリがあることは知っていますが、学習目的でこれらのものから離れようとしています。

0 投票する
2 に答える
3903 参照

android - OpenGL ES 2.0 でのレイピッキング

オブジェクトがクリックされたかどうかを判断するために、OpenGL ES 2.0 でレイピッキングを実装しようとしています。これまでのところ、特定の三角形が押されているかどうかを確認しようとしています。このサイトを動機として使用していますhttp://android-raypick.blogspot.ca/2012/04/first-i-want-to-state-this-is-my-first.html

これは私がこれまでに持っているものです:

とfloat はxy指が画面を押した場所の x 座標と y 座標です。関数onClickは から呼び出されますMainActivity

mMVPMatrixモデルビュー マトリックスです。mProjectionMatrixは射影行列でviewport、値は {0,0,screenhwidth,screenheight} です。

私が得る出力の例は次のとおりです(画面の中央付近に触れました):

私の質問/トピックは、ここで正しい軌道に乗っているかどうかわからないということですか? 私は正しい考えを得ましたか、それとも何かを誤解しているように見えますか? または、三角形でタッチ検出を実現できる他の方法はありますか?

助けや指導をありがとう!

0 投票する
1 に答える
318 参照

opengl - レイピッキングの混乱

キャラクターの境界を見つけるためにレイ ピッキングを使用しています。これは最適ではありませんが、私ができる最善のことであり、実行する必要があります。私は(それに近い)ピクセルパーフェクトな衝突をする必要があり、またたくさんのオブジェクトがあります。

ただし、レイピッキングが正しく機能しません。衝突しますが、適切な場所ではありません。光線のサイズを調整しようとしましたが、それ以上は役に立ちませんでした。

乱雑なコードですみません。まとめただけです。

0 投票する
1 に答える
394 参照

c++ - カメラの位置と角度を考慮して、gluUnProject から近平面と遠平面の向きを変更する方法は?

画面上のマウスクリックから3D空間への光線を追跡しようとしています。私が理解していることから、デフォルトの位置と向きは次のようになります。

gluUnprojection

このコードから:

私の質問は、すべてのマウス クリックが 3D 空間でのカメラの位置と角度からのものであるように見えるように、ニア プレーンとファー プレーンの位置と角度をどのように変更するのかということです。

具体的には、(0,0,1) -> (0,0,-tan(65°)) [-tan (65°) ~= -2.145] これらの点を通るビュー ラインに対して、近距離および遠距離の両方の面が垂直になります。

0 投票する
1 に答える
757 参照

android - Android Open Gl オブジェクトの選択

オープン GL には、ピッキングと呼ばれる用語があります。画面上のどのオブジェクトが選択されたかを判断するために使用されます。ピッキングを使用することと、オブジェクトのすべてのインスタンスにタッチベースのリスナーを配置することの違いを誰かが説明してくれますか? キューブ クラス。

仮説的に; 私がやりたいことは、画面上に複数のキューブをランダムに表示することです。Cube クラスにリスナーを与えると、キューブに触れると、押された各キューブに応じてリスナーが起動するはずです。

これは、リスナーを追加するコードです。これは可能ですか、それともピッキングが必要ですか?