基本上我想在XNA(C#/ .NET)中使用光线和平面来检测模型之间的碰撞。但在我能做到这一点之前,我迫切需要知道它们是如何工作的。
每当我去某处寻找Ray / Plane的例子时,我只会选择教程 - 我不是在寻找教程......
我一直试图做的是拿一架飞机,喂它3 Vector3,所以它代表一个3d原始三角形,然后向它射出雷。雷只是空间和方向的一个点。
我的问题是,当我在飞机上射出雷时,它给了我一些我无法理解的结果。例如:
假设我有一个表示坐标为{0,0,0} {1,0,0} {0,0,1}
的图元的平面现在我把雷放在{0.5,1,0.5}(大致在三角形平面中心上方)并给它指示方向; {0,-1,0}
这给了我1,这是预期的,因为平面比Ray低1个单位,Ray指向下方。 然而,当我把Ray指向,例如{2,0,0}时,它仍然给我一个数字,这没有任何意义,因为{2,0,0}是一个不在三角形上的点。
这是我一直在使用的代码;
Plane plane = new Plane(Vector3.Zero, Vector3.Right, Vector3.Backward);
Vector3 rayPos = new Vector3(0.5f, 1f, 0.5f);
Vector3 direction = new Vector3(1f, 0f, 1f) - rayPos;
direction.Normalize();
Ray ray = new Ray(rayPos, direction);
Console.WriteLine(ray.Intersects(plane));
我觉得我遗漏了一些非常重要的东西,而且我认为这一切都错了。任何帮助都会非常感激。
答案 0 :(得分:0)
虽然2,0,0不在平面上,但方向((2,0,0) - rayPos)是一个与平面相交的方向(如果从当前的rayPos开始)并返回结果1.87 ...