add:三维旋转的三个方法;同时给不同部位上色方便区分
This commit is contained in:
		@@ -10,6 +10,7 @@ public class MainBehaviour : MonoBehaviour
 | 
				
			|||||||
    private readonly List<GameObject> _nodes = new List<GameObject>();
 | 
					    private readonly List<GameObject> _nodes = new List<GameObject>();
 | 
				
			||||||
    private readonly List<PoseTransform> _poseTransforms = new List<PoseTransform>();
 | 
					    private readonly List<PoseTransform> _poseTransforms = new List<PoseTransform>();
 | 
				
			||||||
    private readonly UdpListener _listener = new UdpListener();
 | 
					    private readonly UdpListener _listener = new UdpListener();
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Start is called before the first frame update
 | 
					    // Start is called before the first frame update
 | 
				
			||||||
    private void Start()
 | 
					    private void Start()
 | 
				
			||||||
@@ -26,7 +27,15 @@ public class MainBehaviour : MonoBehaviour
 | 
				
			|||||||
        foreach (var poseTransform in _poseTransforms)
 | 
					        foreach (var poseTransform in _poseTransforms)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var index = (int)poseTransform.MediaPipeName;
 | 
					            var index = (int)poseTransform.MediaPipeName;
 | 
				
			||||||
            _nodes[index].transform.position = _poseTransforms[index].MediaPipePos * 5;
 | 
					            
 | 
				
			||||||
 | 
					            var temp = new Vector4(_poseTransforms[index].MediaPipePos.x,
 | 
				
			||||||
 | 
					                                   _poseTransforms[index].MediaPipePos.y,
 | 
				
			||||||
 | 
					                                    _poseTransforms[index].MediaPipePos.z,1);
 | 
				
			||||||
 | 
					            //temp = RotateAxisZ(180) * temp;
 | 
				
			||||||
 | 
					            //warning:乘法的顺序不能改!
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            _nodes[index].transform.position = new Vector3(temp.x, temp.y, temp.z) * 5;
 | 
				
			||||||
 | 
					            //_nodes[index].transform.position = _poseTransforms[index].MediaPipePos * 5;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -41,7 +50,20 @@ public class MainBehaviour : MonoBehaviour
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            var ball = GameObject.CreatePrimitive(PrimitiveType.Sphere);
 | 
					            var ball = GameObject.CreatePrimitive(PrimitiveType.Sphere);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ball.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f);
 | 
					            ball.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (i <= 10)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ball.GetComponent<Renderer>().material.color = Color.red;//给头部添加颜色
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (i > 10 && i <= 22)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ball.GetComponent<Renderer>().material.color = Color.blue;//给手部添加颜色
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (i > 12 && i <= 32)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ball.GetComponent<Renderer>().material.color = Color.green;//给脚部添加颜色
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            _nodes.Add(ball);
 | 
					            _nodes.Add(ball);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -57,10 +79,55 @@ public class MainBehaviour : MonoBehaviour
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            var poseTransform = new PoseTransform(landmark.Type)
 | 
					            var poseTransform = new PoseTransform(landmark.Type)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                MediaPipePos = new Vector3(landmark.X, -landmark.Y, landmark.Z)
 | 
					                MediaPipePos = new Vector3(landmark.X, landmark.Y, landmark.Z)
 | 
				
			||||||
            };
 | 
					            };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            _poseTransforms[(int)landmark.Type] = poseTransform;
 | 
					            _poseTransforms[(int)landmark.Type] = poseTransform;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //绕X轴旋转
 | 
				
			||||||
 | 
					    private Matrix4x4 RotateAxisX(float rot)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        var matrix = new Matrix4x4();
 | 
				
			||||||
 | 
					        float cosrot = MathF.Cos(rot);
 | 
				
			||||||
 | 
					        float sinrot = MathF.Sin(rot);
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        matrix.SetRow(0, new Vector4(1,0,0,0));
 | 
				
			||||||
 | 
					        matrix.SetRow(1, new Vector4(0,cosrot,-sinrot,0));
 | 
				
			||||||
 | 
					        matrix.SetRow(2, new Vector4(0,sinrot,cosrot,0));
 | 
				
			||||||
 | 
					        matrix.SetRow(3, new Vector4(0,0,0,1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return matrix;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //绕Y轴旋转
 | 
				
			||||||
 | 
					    private Matrix4x4 RotateAxisY(float rot)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        var matrix = new Matrix4x4();
 | 
				
			||||||
 | 
					        float cosrot = MathF.Cos(rot);
 | 
				
			||||||
 | 
					        float sinrot = MathF.Sin(rot);
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        matrix.SetRow(0, new Vector4(cosrot,0,sinrot,0));
 | 
				
			||||||
 | 
					        matrix.SetRow(1, new Vector4(0,1,0,0));
 | 
				
			||||||
 | 
					        matrix.SetRow(2, new Vector4(-sinrot,0,cosrot,0));
 | 
				
			||||||
 | 
					        matrix.SetRow(3, new Vector4(0,0,0,1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return matrix;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    //绕Z轴旋转
 | 
				
			||||||
 | 
					    private Matrix4x4 RotateAxisZ(float rot)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        var matrix = new Matrix4x4();
 | 
				
			||||||
 | 
					        float cosrot = MathF.Cos(rot);
 | 
				
			||||||
 | 
					        float sinrot = MathF.Sin(rot);
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        matrix.SetRow(0, new Vector4(cosrot,-sinrot,0,0));
 | 
				
			||||||
 | 
					        matrix.SetRow(1, new Vector4(sinrot,cosrot,0,0));
 | 
				
			||||||
 | 
					        matrix.SetRow(2, new Vector4(0,0,1,0));
 | 
				
			||||||
 | 
					        matrix.SetRow(3, new Vector4(0,0,0,1));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return matrix;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user