1

現在のカメラ位置/ビューからピッキング レイを取得しようとしているので、それを使用して 3D ワールドでオブジェクトを選択できます。問題は、カメラを動かすと光線がおかしくなることです。何か間違ったことをしていますか、それとも浮動小数点の精度の問題ですか?

ViewportF viewport = new ViewportF();
viewport.Height=307.0
viewport.MaxDepth=1.0
viewport.MinDepth=0.0
viewport.Width=689.0
viewport.X=0.0
viewport.Y=0.0

Matrix viewProjection = new Matrix(new float[] {
    1.075709f, 0, 0, 85067.07f, 
    0, 2.414213f, 0, -146011.6f, 
    0, 0, 1, 14.90265f, 
    0, 0, 1, 15.00265});

Ray ray = Ray.GetPickRay(263, 77, viewport, matrix);

光線の結果は次のとおりです。

ray.Position {X:-79080,03 Y:60480,02 Z:-14,90265}
ray.Direction {X:-0,1926253 Y:0,1401343 Z:0,9712146}

画面上では、マウスの下に次の行が作成されます:
(左上)

私が理解している限り、レイはマウスの下に表示されるべきではありませんよね?
カメラを動かして、描いているレイを変更しないと、明らかに見えるようになります。

編集:カメラを動かさないと、マウスの下に光線が見えず、回転しても見えません。
edit2: ray.Position は正しいようですが、Ray.Direction は間違っているようですが、引用しないでください。

4

2 に答える 2

-1

最終的には、次のコードに過ぎませんでした。

public Ray GetPickRay(float mouseX, float mouseY)
{
    return Ray.GetPickRay((int)mouseX, (int)mouseY, new ViewportF(0, 0, ViewportWidth, ViewportHeight), ViewProjectionMatrix);
}
于 2015-01-09T10:57:38.013 に答える