SharpDX GetPickRay问题

问题描述 投票:0回答: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似乎是错误的,虽然不引用我。

mouse visible raytracing sharpdx picking
1个回答
0
投票

我在网上寻找了不同的光线拾取方法,并发现了以下内容: http://www.toymaker.info/Games/html/picking.html 代码似乎不那么复杂(与SharpDX源相比),并且在我的用例中表现完美。

作为旁注,光线现在出现在屏幕上,它的原点或结尾位于鼠标正下方。

© www.soinside.com 2019 - 2024. All rights reserved.