在XNA(3D)中使用光线/平面检测进行碰撞

在XNA(3D)中使用光线/平面检测进行碰撞,xna,Xna,基本上,我想在XNA(C#/.NET)中使用光线和平面来检测模型之间的碰撞。但在我能做到这一点之前,我迫切需要知道它们是如何工作的 每当我去某个地方寻找光线/平面示例时,除了挑选教程外,我什么都得不到-我不是在寻找挑选教程 我一直想做的是拿一个平面,给它3个矢量,这样它就代表了一个3d的基本三角形,然后用光线照射它。光线只是空间中的一个点和一个方向 我的问题是,当我向飞机发射光线时,它会给我一些我无法理解的结果。例如: 假设我有一个平面,它代表一个坐标为{0,0,0}{1,0,0}{0,0,1}

基本上,我想在XNA(C#/.NET)中使用光线和平面来检测模型之间的碰撞。但在我能做到这一点之前,我迫切需要知道它们是如何工作的

每当我去某个地方寻找光线/平面示例时,除了挑选教程外,我什么都得不到-我不是在寻找挑选教程

我一直想做的是拿一个平面,给它3个矢量,这样它就代表了一个3d的基本三角形,然后用光线照射它。光线只是空间中的一个点和一个方向

我的问题是,当我向飞机发射光线时,它会给我一些我无法理解的结果。例如:

假设我有一个平面,它代表一个坐标为{0,0,0}{1,0,0}{0,0,1}的基元

现在我在{0.5,1,0.5}(大致在三角形平面的中心上方)放置一条光线,并给出方向;{0,-1,0}

这给了我1,这是预期的,因为平面比光线低1个单位,光线指向下方。 但是,当我把光线点放在,比如说,{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));

我觉得我遗漏了一些非常重要的东西,而且我想得全错了。非常感谢您的帮助。

尽管2,0,0不在平面上,但方向((2,0,0)-rayPos)是一个与平面相交的方向(如果从当前rayPos开始),并返回1.87…的结果。

啊。。。请看-我的印象是((2,0,0)-rayPos).Normalize()是一个指向2,0,0的方向。那么我应该如何得到这个方向呢?要使光线朝着2,0,0的方向运动,它只是
(2,0,0);也就是(1,0,0)
Ray-Ray=new-Ray(rayPos,Vector3.Normalize(new-Vector3(2,0,0));
Hey-Steve。我现在真正想知道的是如何获得有效的方向向量。它只是(TargetPosition-RayPosition.Normalize?啊-我想我知道我遗漏了什么。平面是一个无限大的构造吗?而不是一个三角形的代表吗?是的,平面是无限大的。任何归一化向量都可以是一个方向。如果你想要两个已知点之间的方向,它应该是
(vec3To-vec3From)。Normalize()