// processor of realtime data // Function is called every time protocol receives a datapacket from server public void Process(RTPacket packet) { mPacket = packet; List <Q6DOF> bodyData = packet.Get6DOFData(); List <Q3D> markerData = packet.Get3DMarkerData(); if (bodyData != null) { for (int i = 0; i < bodyData.Count; i++) { Vector3 position = new Vector3(bodyData[i].Position.X, bodyData[i].Position.Y, bodyData[i].Position.Z); //Set rotation and position to work with unity position /= 1000; mBodies[i].Position = QuaternionHelper.Rotate(mCoordinateSystemChange, position); mBodies[i].Position.z *= -1; mBodies[i].Rotation = mCoordinateSystemChange * QuaternionHelper.FromMatrix(bodyData[i].Matrix); mBodies[i].Rotation.z *= -1; mBodies[i].Rotation.w *= -1; mBodies[i].Rotation *= QuaternionHelper.RotationZ(Mathf.PI * .5f); mBodies[i].Rotation *= QuaternionHelper.RotationX(-Mathf.PI * .5f); } } //Get marker data that is labeled and update values if (markerData != null) { for (int i = 0; i < markerData.Count; i++) { Q3D marker = markerData[i]; Vector3 position = new Vector3(marker.Position.X, marker.Position.Y, marker.Position.Z); position /= 1000; mMarkers[i].Position = QuaternionHelper.Rotate(mCoordinateSystemChange, position); mMarkers[i].Position.z *= -1; } } }