我有一个 PS4 游戏控制器,我现在可以使用 HID 从中读取数据,包括 6 个轴,如下图所示。
三个轴代表加速度,另外三个轴代表角速率。
有了这些数据,我应该能够使用 WPF 中的 3D 模型来可视化控制器的实际姿势。目前,我发现Steam中的“3D Controller Overlay”功能完美地达到了我想要的效果。有没有任何库或框架可以帮助实现这种效果?
最后,我找到了this解决方案,完美解决了我的问题。创建
MadgwickAHRS
的实例,然后调用Update
更新六轴数据,最终得到用于旋转的四元数。具体代码如下:
static MadgwickAHRS AHRS = new MadgwickAHRS(4f / 1000f, 0.1f);
static float deg2rad(float degrees)
{
return (float)(Math.PI / 180) * degrees;
}
private void OnSensorDataUpdated(byte[] sensorData){
short gyroX = ..., gyroY = ..., gyroZ = ..., accelX = ..., accelY = ..., accelZ = ...;
//Since my gyro data is in degrees, it needs to be converted to radians
AHRS.Update(deg2rad(gyroX), deg2rad(gyroY), deg2rad(gyroZ), accelX, accelY, accelZ);
var rotation = new Quaternion(AHRS.Quaternion[1], AHRS.Quaternion[2], AHRS.Quaternion[3], AHRS.Quaternion[0]);
this.Dispatcher.Invoke(()=>{
var rotateTransform = new RotateTransform3D();
rotateTransform.Rotation = new QuaternionRotation3D(rotation);
YourModel.Transform = rotateTransform;//Update to ModelVisual3D
});
}