2015-01-09 4 views
0

Я пытаюсь получить луч выбора из текущего положения камеры/вида, поэтому я могу использовать его для выбора объектов в 3D-мире. Проблема в том, что когда я передвигаю камеру, луч становится неправильным. Я что-то делаю неправильно или это проблема с плавающей точкой?Проблемы с SharpDX GetPickRay

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.Direction кажется неправильной, хотя не цитируйте меня на ней.

ответ

0

Я искал другой метод лучевой захватного в Интернете, и обнаружил следующее:
http://www.toymaker.info/Games/html/picking.html
код представляется менее сложным (по сравнению с источником SharpDX) и отлично работает в моем случае использования.

В качестве опоры, луча делает сейчас на экране, это начало или конец, находится прямо под мышью.