2015-01-09 5 views
0

현재 카메라 위치/뷰에서 피킹 선을 얻으 려하므로 3D 세계에서 오브젝트를 선택하는 데 사용할 수 있습니다. 문제는 카메라를 움직일 때 광선이 올바르지 않게된다는 것입니다. 제가 잘못했거나 부동 소수점 정밀도 문제입니까?SharpDX GetPickRay issues

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

그리고 화면에 내 마우스 아래에서 다음 행을 생성합니다 :

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); 

광선의 결과는 지금까지 내가 이해
(왼쪽 위)

을 내 마우스 아래에서 광선이 보이지 않아야합니다.
카메라를 움직여서 내가 그린 광선을 변경하지 않으면 눈에 띄게됩니다.

편집 : 카메라를 움직이지 않으면 광선이 내 마우스 아래에서 보이지 않으며 회전 할 때도 보이지 않습니다.
edit2 : ray.Position이 정확하고 Ray.Direction이 틀린 것처럼 보입니다.하지만 그것에 대해 언급하지 마십시오.

답변

0

나는 온라인으로 다른 선 따기 방법을 찾았다, 발견 한 다음
http://www.toymaker.info/Games/html/picking.html
코드는 (SharpDX 원에 비해) 덜 복잡 것으로 보인다 내 유스 케이스에 완벽하게 작동합니다.

옆줄로, 이 화면에 나타나고, 원점 또는 끝이 마우스 바로 아래에 있습니다.