問題タブ [mouse-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.
c++ - OpenGL での光線球の交差
OpenGL でマウス ピッキングを実行するために光線と球体の交差を使用しようとしています。オンラインでいくつかの数式を見つけました。最後に試したのは、Stack Exchange のユーザーによって提案されたものでした。
この回答について私が理解したことから、二次方程式に正の根があるかどうかを確認しています。光線が球とまったく交差する場合でも、交差がどこで発生するかはあまり気にしません。私のコードは次のとおりですが、動作していないようです。
私の C++ スキルはかなり未熟なので、これが恐ろしい方法である場合は申し訳ありません。このメソッドは、3 つのフロートの 2 つのベクトル、カメラの位置、およびカメラの 1 ユニット前のシーン内のポイントの座標を取得します (この方向を呼び出しました)。
オブジェクトに直面してキーを押したときにオブジェクトの位置と半径を取得したいのですが、代わりに、シーン内のオブジェクトの 1 つに立っているとき、または別の大きなオブジェクトの近くに立っているときにのみ出力を取得します物体。明らかに私の計算 (またはさらに悪いことに、私のコード) に何か問題がありますが、それが何であるかを理解することはできません。:(
さらにコードが必要な場合、または不明な点がある場合はお知らせください。これは SO での最初の質問なので、この質問の言い回しが悪い場合は申し訳ありません。
編集:マウス座標をレイ上のポイントとして使用するべきではありませんでした。私の質問を少し編集しました。
opengl - シェーダーは、ID で選択するために何も書き込みません
int id によるピッキングを実装しようとしていますが、クリア カラーは正しく読み取れますが、シェーダーが何も書き込まないようです。
vs、デバッグのためにマトリックスを完全にスキップしました:
fs、現時点ではハードコードされた値、出力は 0 ( FRAG_COLOR
)、1 も試しましたが何もしませんでした:
初期段階では、 3 つのアタッチメント、 RESOLVE
1 つの深さ、0 に 1 つの浮動小数点色、1 にピッキングするための 1 つの整数を備えた という名前の 1 つの fbo があります。Fbo が完成しました。
およびレンダリングと読み取り、さらに追加されましたが、何もglFlush
ありglFinish
ませglPixelStorei
ん:
私が言ったように、10でクリアすると10を読むので、それは機能しています.唯一の問題は私のシェーダーです..
エラーを見つけることができますか?
編集: デバッグしようとして、色 1 の添付ファイルの種類を確認しています
私は得る:
5890 はGL_TEXTURE
、名前が正しいようです
を使用しようとしましたが、代わりに型をglFramebufferTexture2D
取得しますGL_TEXTURE
GL_TEXTURE_2D
編集 2: 深度コンポーネントを読み取ろうとすると、常に 0 になります
3d - View Space と NDC の関係は?
DirectX 11 でピッキング用に、ピッキング レイをスクリーン スペース座標からビュー スペースに変換したいと考えています。
以下は、この変換を説明する一部 (「DirectX 11 を使用した 3D ゲーム プログラミングの概要」から) です。
赤い部分がわかりません。私の知る限り、頂点に射影行列を掛けて、ビュー空間から均一なクリップ空間に変換します。次に、ハードウェアが透視分割を行い、NDC 空間に変換します。では、x 座標に縦横比rを掛けるだけで、この変換を逆にするにはどうすればよいでしょうか?
通常、XMVector3Unproject() を使用してこの変換を実行します。これは、ビューポート変換を逆にし、(逆投影 * 逆ビュー * 逆世界) 行列を乗算します。
アスペクト比を使用したこの他の「方法」がどのように機能するか(なぜ? )誰かが説明できますか?
EDİT:参照されている 5.6.3.3 の部分を以下に追加しました。
android - GL ES 1.0 を開きます。ワールド座標からスクリーン座標へ
3Dピッキングのために、私はこれを行う予定でした:
・タッチ座標(x,y)を取得
-モデルの頂点バッファーから頂点を選択します (xM、yM、zM)。
-次に、自分の手で (xM、yM、zM) をスクリーン座標に投影します。
(xM, yM, zM) ---> (xP, yP, ...)
次に、一致を確認します (たとえば、sqrt((x - xP)^2 + (y - yP)^2) < SOME_EPS)
投影のために、錐台マトリックスをmProjectionMatrixに保存しました。
mAccRotationに保存された変換座標:
したがって、テスト関数は次のようになりました: (TESTIFY_VERT は私のモデルの 1 つです)
Resulted[0], Resulted[1]を (xP, yP) として使ってみた
(Resulted[0] + 1) * ( WIDTH / 2.0f ), (-Resulted[1] + 1) * ( HEIGHT / 2.0f )を使用しようとしました
そして、これは機能しません。なんで?アドバイスいただけますか?
PS 私はそのような質問をすべて見てきましたが、私の問題に答えていません。