C# 将两个不同的程序从右手软件镜像到左手软件
我试图将基于右手系统参考的软件的一些几何图形镜像到左手系统参考(Unity 3D)。我正在用C#在两个系统中开发它,一边是在Visual Studio中开发的程序,另一边是在Unity3D中开发的程序。下图说明了2种不同的参考系: 我拥有的代码如下: 在右撇子系统中:C# 将两个不同的程序从右手软件镜像到左手软件,c#,math,unity3d,C#,Math,Unity3d,我试图将基于右手系统参考的软件的一些几何图形镜像到左手系统参考(Unity 3D)。我正在用C#在两个系统中开发它,一边是在Visual Studio中开发的程序,另一边是在Unity3D中开发的程序。下图说明了2种不同的参考系: 我拥有的代码如下: 在右撇子系统中: private List<Geometry> GetCADFromStation() { #region GetCADFromStationStep1 List<Ge
private List<Geometry> GetCADFromStation()
{
#region GetCADFromStationStep1
List<Geometry> PartCollection = new List<Geometry>();
foreach (GraphicComponent component in _ActiveStation.GraphicComponents)
{
if (component is Part)
{
Geometry p = new Geometry();
p.Name = component.Name;
p.TransX = component.Transform.X;
p.TransY = component.Transform.Y;
p.TransZ = component.Transform.Z;
p.RotX = -component.Transform.RX;
p.RotY = -component.Transform.RY;
p.RotZ = -component.Transform.RZ;
PartCollection.Add((Geometry)p);
}
}
#endregion
return PartCollection;
}
我在unity方面的重要功能是ChangeRotationToUnity(),它看起来是这样的:
Quaternion ChangeRotationToUnity(Vector3 rotation)
{
Vector3 flippedRotation = new Vector3(rotation.x, -rotation.y, -rotation.z);
Quaternion qx = new Quaternion();
Quaternion qy = new Quaternion();
Quaternion qz = new Quaternion();
Quaternion qq = new Quaternion();
qx = Quaternion.AngleAxis(flippedRotation.x, Vector3.right);
qy = Quaternion.AngleAxis(flippedRotation.y, Vector3.up);
qz = Quaternion.AngleAxis(flippedRotation.z, Vector3.forward);
qq = qz * qy * qx;
return qq;
}
此功能基于此和此
尽管它的答案似乎合乎逻辑,但它不能正常工作。有人能帮我吗
Quaternion ChangeRotationToUnity(Vector3 rotation)
{
Vector3 flippedRotation = new Vector3(rotation.x, -rotation.y, -rotation.z);
Quaternion qx = new Quaternion();
Quaternion qy = new Quaternion();
Quaternion qz = new Quaternion();
Quaternion qq = new Quaternion();
qx = Quaternion.AngleAxis(flippedRotation.x, Vector3.right);
qy = Quaternion.AngleAxis(flippedRotation.y, Vector3.up);
qz = Quaternion.AngleAxis(flippedRotation.z, Vector3.forward);
qq = qz * qy * qx;
return qq;
}