問題タブ [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.
javascript - Three Jsで正投影カメラを使用する場合のオブジェクトの選択方法
アイソメトリック レベルが進行中で、レベル内のオブジェクトを選択しようとしています。
この1つの正投影カメラとレイキャストでのオブジェクトの選択を含むいくつかのStackoverflowの回答を見てきましたが、現時点では何も機能していないようです。おそらくカメラの設定に関係している可能性があるため、使用している関連コードを次に示します。
マトリックスをループしてタイルを追加するときは、それらをすべて に追加してから、new THREE.Object3D()そのオブジェクトをシーンに追加します。私のonMouseMoveイベントはこんな感じです
問題は、何かが非常にずれていることです。光線は、近くにないときに物と交差し、一度に複数の子と交差しているように見えtilesます。ログに記録intersects.lengthすると、3、2、または 1 つのオブジェクトが返されることがあります。関連する場合に備えて。各オブジェクト メッシュの私のマテリアルは、渡されたnew new THREE.MeshFaceMaterial()6 を含む配列です。new THREE.MeshBasicMaterial()
何か案は?
opengl - 3D ピッキング用のマウス座標から光線を作成する
私の質問
誰かが良い記事/チュートリアル/何かをリンクしたり、マウス座標からレイを正しくキャストして3Dでオブジェクトを選択する方法を説明したりできますか?
私はすでにレイと交差点の作品を持っています。今はマウスのクリックからレイを作成するだけです。
実際に機能するはずだとわかっているものが欲しいのですが、それが最初に正しいかどうかわからないものではなく、ここで専門家に尋ねる理由です.
現在の状態
原点と方向をカメラと同じに設定すると、実際に機能して交差を検出するレイクラスがあります。そのため、カメラを動かすと、実際に正しいものが選択されます。
カメラの動きではなく、実際にマウスで 3D ピッキングを行いたいと思います。
私は本当に苦手なので、これに関する他の多くの質問、2つのチュートリアル、特にさまざまな数学に関するものを読みました。
しかし、それはあまり役に立ちませんでした。なぜなら、そこの人々は、実際には廃止されているように見えるいくつかの「アンプロジェクト」機能をよく使用し、使用方法がわからず、アクセスできないからです。
現在、光線の原点をカメラの位置に設定し、このチュートリアルの計算から光線の方向を取得しようとしています。
そして、それは少し機能します。つまり、カメラがオブジェクトを指しているときに選択が機能し、時にはy軸全体に沿っても機能します。何が起こっているのかわかりません。
誰かが私のコードを今すぐ見たい場合:
opengl - 光線を作成する 2 つの gluUnproject 呼び出しでワールド座標でマウスを取得する
私は多くの人が良い方法を見つけているように見えるものを使用しようとします。異なる z 値で gluUnproject を 2 回呼び出してから、これら 2 つのベクトルから光線の方向ベクトルを計算しようとします。
私はこの質問を読み、そこにある構造を自分のコードに使用しようとしました:
しかし、これは均一なクリップ座標のみを返します(私は信じています)。これは、すべての軸で -1 から 1 の範囲しかないためです。
レイを作成できる座標を実際に取得するにはどうすればよいですか?
編集:これは私が行列を構築する方法です:
編集2:
これは、関数が現在どのように見えるかです:
}
私は独自の射影とビュー マトリックスを使用しようとしていますが、これは奇妙な結果しか得られないようです。
GlGet... を使用すると、右上隅をクリックすると次のようになります:
start: (0.97333336, -0.98, -1.0)
end: (0.97333336, -0.98, 1.0)
私が自分のものを使用すると、同じ位置にこれが得られ
ます
:
ビューマトリックスだけでなく、modelViewマトリックスが実際に必要ですが、すべてのオブジェクトの表示呼び出しごとに変更および作成されるため、取得方法がわかりません。
しかし、これは本当に問題ですか?このチュートリアルで彼は、「通常、目の空間からクリップ空間に入るには、ベクトルに射影行列を掛けます。この行列の逆数を掛けることで、逆方向に進むことができます」と述べています。次のステップで、彼は再びビュー行列の逆数を掛けるので、これが実際にすべきことだと思いましたか?
編集3:
ここで、user42813が提案したことを試しました:
ただし、方向と原点の値は常に同じです:
origin: (-0.04557252, -0.0020000197, -0.9989586)
direction: (-0.04557252, -0.0020000197, -0.9989586)
android - openGL ES でレイピッキング用のレイを取得する
OK、このコードを ray for opengl ES に使用しましたが、
コードの最後に。それは言う、
シンボルを解決できません
コードは次のとおりです。
何が問題ですか?
c++ - レイピッキングの「Ray」作成が完全に機能しない
プロジェクト内のオブジェクトを選択するための「raypicker」を実装しようとしています。これを実装する方法を完全には理解していませんが、概念的にはどのように機能するかは理解しています。私はこれを行う方法を学ぼうとしてきましたが、私が見つけたほとんどのチュートリアルは頭を悩ませています。私の現在のコードは、ここで見つけた最近のチュートリアルの 1 つに基づいています。
数時間の改訂の後、私がレイピッカーで抱えている問題は、実際にはそもそもレイの作成にあると思います。間違いなく三角形の領域内に位置する座標で近/遠面を置換/ハードコードすると、ピッカーはそれを正しく識別します。
私の問題は次のとおりです。レイの作成では、現在の「カメラ」またはパースペクティブが完全に考慮されていないように見えるため、カメラの回転はマウスの位置に影響しません。これを改善するには、gluUnProject() などを使用する必要があると思いますが、これを使用するたびに返される x、y、z 座標は信じられないほど小さくなります。
私の現在の光線の作成はめちゃくちゃです。他の人が最初に提案した方法を使用しようとしましたが、どの方法を試しても、ピッカー/交差機能では機能しなかったようです。
私の光線作成のコードは次のとおりです。
繰り返しますが、以前はビューポート、モデル & 投影行列を読み込み、マウス座標を非投影にしていましたが、1920x1080 ウィンドウ内では、各マウス イベントの xy & z に対して -2 から 2 の範囲の値しか得られません。そのため、この方法を試していますが、この方法はカメラの回転とズームでは機能しません。
ピクセル カラー ピッキングはしたくありません。後でこのテクニックが必要になる可能性があることを誰が知っているのか、そしてこれまでに費やした労力の後であきらめたくないからです。