問題タブ [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 に答える
166 参照

opengl - openglのオブジェクトに特定のIDを割り当てます

私はマルチエージェントアプリケーションに取り組んでいます。シミュレーション中、任意の時間ステップに存在するエージェントを表示します。このエージェントには固有の ID があります。

ピッキングを使用して、それらのオブジェクトを識別して操作したいと考えています。ピッキング方法は機能していますが、エージェントの ID を取得できません (エージェントの ID と相関していないジオメトリの ID しか取得できません)。そのため、新しく描画されたジオメトリに対応するエージェントの ID を割り当てる方法を見つける必要があります。

オブジェクトを描画するときにidを割り当てるopenglの方法はありますか(おそらくglBegin()とglEnd()の間)?

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 投票する
1 に答える
1874 参照

opengl - 頂点シェーダーベースのジオメトリ変形が適用された 3D シーンの汎用ピッキング ソリューション

3D シーン (OpenGL を使用した OpenSceneGraph) のナビゲーション手法を実装しようとしています。とりわけ、ユーザーは画面上のシーン オブジェクトをクリックしてそこに向かって移動できる必要があります。

ナビゲーション テクニックは、頂点シェーダーを使用してシーン ジオメトリにグローバルな変形を適用する別のプロジェクトに統合する必要があります。ここに問題があります。ジオメトリは頂点シェーダーを使用して変形されるため、マウス カーソルの位置を、ユーザーが実際に選択したスポットのワールド座標に非投影にするのは簡単ではありません。しかし、ナビゲーション技術で適切なカメラの動きを実行するには、これらの座標が必要です。

この非投影を実行する 1 つの方法は、頂点シェーダー (変形に使用される) を変更して、頂点の元の位置と法線を別々のテクスチャに保存できるようにすることです。その後、マウス位置でこれらのテクスチャを読み取って、目的の値を取得できます。

今、私が言ったように、頂点シェーダーは私が実際に触れたくない別のプロジェクトに属しています。私のナビゲーション手法の目標の 1 つは、他のプロジェクトにも簡単に統合できるように、できるだけ汎用的なものにすることです。

ここで質問です。OpenSceneGraph または OpenGL に、これまで考慮していなかった機能はありますか? 頂点シェーダー コーダーとは無関係に、フラグメントのワールド座標を取得できるものはありますか?

0 投票する
0 に答える
932 参照

c++ - OpenGL カラーピッキング RGBA と RGB

次の 3 つの方法でカラー ピッキング/選択を実装したいと思います。

基本的に、符号なし整数 (32 ビット) を 4 バイトの R、G、B、A にパックします。GL_SELECT に比べてシンプルで非常に高速です。

問題は、時々うまくいかないことです。NVIDIA 9800 グラフィックス カードを搭載した Windows では動作しません。Mac/Windows の ATI Radeon 4670 で動作します。

問題はアルファチャンネルにあると考えていたので、この実装を試しました:

グラフィックス カードと OS の両方で選択が機能するようになりましたが、不適切な頂点が選択されることがあります (選択範囲の外側)。

これはどのように起こりますか?堅牢で、さまざまなグラフィックス カードで常に正しいカラー ピッキングを実装するためのより良い方法はありますか?

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

django - GenericForeignKeyを持つクラスでDjangocache.set()が失敗します。原因は何ですか?

のモデルがありGenericForeignKeyます。を呼び出すとcache.set(key, trac_obj)、失敗します。GenericForeignKey犯人なのかしら?

エラーメッセージは次のとおりです。

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

opengl - OpenGL 3D ピッキング

opengl ピッキングに関する多くのサンプル コードを読みました。それらのほとんどすべてが投影に gluPerspective 関数を使用しています。私は gluPerspective 関数の代わりに glOrtho を使用しています。

そして、私のSelection関数は以下の通りです(DrawBufferは私のペイントコードです):

しかし、それは機能しません、私はその理由を理解できませんか?もう 1 つの問題は、glDrawArrays 関数を使用して多数の線を描画する場合、glLoadName を呼び出して各線にフラグを付けるにはどうすればよいかということです。

私のレイトレーサーアルゴリズムは次のとおりです。

0 投票する
5 に答える
2356 参照

3d - webgl と glsl の選択

webgl ピッキングを最初から実装しており、レイ交差テストとは対照的に、GLSL ルートをたどることにしました。

そのため、シーン全体を個別のフレーム バッファーにレンダリングし、各オブジェクトに一意の色を割り当てて、フラグメント シェーダーに均一変数として渡します。シーンがレンダリングされると、バッファーを gl.readPixels() し、クリック座標で色の値を取得します (ブラウザーの座標系とは異なる GL を考慮して座標系を反転させます)。

私が抱えている問題は、シェーダーが gl_FragColor シェーダー出力に渡される色を、カラー チャンネルごとに 0.0-1.0 の範囲で vec4 浮動小数点数として表すのに対し、gl.readPixels() はカラー チャンネルを 0-255 の範囲の整数として返すことです...この変換を行う一部の精度が失われ、ピッキング エラーが発生する可能性があります (シーン内に多数のオブジェクトがある場合 (255 を超える場合)、または整数から浮動小数点への丸めが、異なるオブジェクト ID を区別するために必要な粒度よりも大きい場合)。

誰かがこれを解決する方法を知っていますか、または私を正しい方向に向けますか? readPixels() は 0.0 ~ 1.0 の範囲のカラー チャネルの float 値を返すことができますか? 複数のチャネルにまたがる単一のオブジェクト ID をパックできますか (単一のチャネルに限定されず、255 個のオブジェクトしか選択できないようにするには?)

ご協力ありがとうございました

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

android - Android で OpenGL ES 2.0 を使用してバックバッファに描画する

カラーコードを使用して 2D アプリケーションの簡単なピッキングを実装したいと考えています。これまでのところ、GLES20.glDrawElements() を呼び出してオブジェクトをレンダリングしており、要求があった場合にのみレンダリングしています。

現在、このトピックに関する OpenGL のチュートリアルを多数読みましたが、OpenGL ES のチュートリアルは 1 つも見つかりませんでした。また、これらの変換/転送にも失敗しました。

それで、私は2つの質問があります。ダブルバッファリングを有効にするには? 私が知っている限りでは、バッファーが 1 つしかないからです。これらのバッファは自動的にスワップされますか? これらはそのための方法であるため、そうではないと思います。バックバッファのみにレンダリングする方法は? 一度だけでいいので、新しいフレームをレンダリングするたびに行うのはもったいないです。

ほぼ 4 年間、すべての質問に対する回答を見つけてきた後、stackoverflow で質問するのはこれが初めてなので、お手柔らかにお願いします :)

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

android - Android での OpenGL ES 2.0 でのカラー ピッキング

カラーピッキング方法を実装しましたが、それも機能します。時折。問題は、メソッドでメソッドを呼び出すとonSurfaceChanged、正しいピクセルが読み戻されることです。しかしonTouchevent、GLSurfaceView でメソッドを呼び出すと、0 しか読み戻されません。私の方法では、 を作成し、framebuffer objectそれに 2 つアタッチrenderbuffer objectsします。レンダラーが 0 に設定されてRENDERMODE_WHEN_DIRTYおり、glGetError()0 を返します。問題はどこにあるのでしょうか? それが私の方法なのか、単にこれを実行できないのかはわかりませんonTouchevent。レンダラーでのピッキング メソッドのソースコードは次のとおりです。

それは関連性があるかもしれないので、ここに私のonDrawFrame方法があります:

onDrawFrame メソッドが別のスレッドで実行されることを読みましたが、私はRENDERMODE_WHEN_DIRTY...

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

c++ - D3DXIntersect 関数について質問します:(

これは私のピッキング サンプル ソース コードです。私は問題があります。

3D オブジェクトを 3 つ作成するとします。そのため、ピッキングは 3 番目のオブジェクトとして機能します。最初、2番目のオブジェクトが機能しません。

オブジェクトを 1 つだけ作成した場合。ピッキングがうまくいきます!

2つのオブジェクトを作成した場合。ピッキングは、最初ではなく 2 番目のオブジェクトで機能します。

最後のオブジェクトを作成するだけでうまくいきます。

この問題が発生する理由がわかりません。

アドバイスをください。