Unity3D-从处于相同世界位置的原始平面获取数学平面
我有一个游戏对象。平面在一个给定的位置,以便于视觉。 从这一点出发,考虑到平面在世界空间中的旋转和位置,我必须制作一个数学平面,用于下一步的计算,但有点不对劲 我试过了Unity3D-从处于相同世界位置的原始平面获取数学平面,unity3d,primitive,plane,Unity3d,Primitive,Plane,我有一个游戏对象。平面在一个给定的位置,以便于视觉。 从这一点出发,考虑到平面在世界空间中的旋转和位置,我必须制作一个数学平面,用于下一步的计算,但有点不对劲 我试过了 new Plane(go.transform.InverseTransformDirection(-go.transform.right), go.transform.InverseTransformPoint(go.transform.position)); 其中go是基本平面对象。 从后来的结果来看,它在世界空间中的位置似
new Plane(go.transform.InverseTransformDirection(-go.transform.right), go.transform.InverseTransformPoint(go.transform.position));
其中go是基本平面对象。
从后来的结果来看,它在世界空间中的位置似乎很好,但旋转不是
基本面(go)旋转90度,因此它不是朝上而是朝侧面
这里怎么了
编辑:当前设置为
go.transform.InverseTransformDirection(-go.transform.right);
return new Plane(go.transform.up, go.transform.position);
void OnDrawGizmos()
{
Gizmos.color = Color.magenta;
Gizmos.DrawLine(planePrimitive.transform.position, planePrimitive.transform.position + plane.normal * 3f);
}
这个
go.transform.InverseTransformDirection(-go.transform.right)
返回一个面向侧面的向量,并将其用作平面法线
一个基本的平面
对象的法线就是它的局部变换.up
向量
然后请注意,平面
采用世界空间坐标,因此使用反向变换方向
和反向变换点
是没有意义的,因为transform.up
和transform.position
已经在世界空间中
新平面(go.transform.up,go.transform.position);
如果你说的是一个基本的Quad
对象,那么你想要的向量是-transform.forward
新平面(-go.transform.forward,go.transform.position);
您的小发明:
您正在使用testPlane.normal
就像它是一个位置一样。不是!法线是一个方向,不会告诉任何关于位置的信息
例如,您要执行的操作(不使用局部空间小控件)
Gizmos.drawine(go.transform.position,go.transform.position+testPlane.normal*3f);
或者如果你只能依靠飞机本身使用
Gizmos.绘制线(plane.distance,plane.distance+testPlane.normal*3f);
在第二个平面中,平面。距离是从0,0,0
到平面上最近点的向量。因此,它仍然不会精确地位于给定平面对象的位置。谢谢。为了澄清,我使用了PrimitiveType.Plane。我用一条小控件线来显示数学平面的法线,它朝向正确的方向,尽管它的位置偏离了它应该在的位置。所以它被解释为不相交的。作为参考,基本面嵌套在许多其他游戏对象中,这些对象位于远离中心的位置,而数学平面似乎位于中心(从可能错误的gizmos线位置判断),我没有看到您的gizmos绘图。。。平面
无限大,因为它是一个纯粹的数学结构。。它没有真正的“中心”或“位置”,因此我猜unity只是使用0,0,0
。。。但是你知道你也可以在里面画小控件,对吗?localSpace小控件太棒了。现在它实际上在正确的位置绘制,使用基本体的位置和平面的法线作为方向。尽管平面仍被视为不相交。它的位置必须关闭?谢谢,小发明现在已经修好了。它从原始平面的中心绘制,指向正确的方向,没有奇怪的偏移。(数学)平面被传递到一个函数中,该函数检查它是否与另一个网格相交,它说它不相交。它很早就通过在这里和那里改变一些变量的不顾一切的尝试起作用了,所以我知道这不是这个函数的错。为什么飞机在这个位置不被认出来?