Unity调用 so

using UnityEngine;
using System;
using System.Collections;
using System.Runtime.InteropServices;

public class GetRToCameraFromSO : MonoBehaviour {

    [DllImport("Sensor")]
    private static extern int getQuat(IntPtr ptr_sensor);
    [DllImport("Sensor")]
    private static extern int initManager();
    [DllImport("Sensor")]
    private static extern int unitManager();

    private IntPtr mSensorPtr;

    public Transform mchildTrans;

    private const int SENSORPTRCOUNT = 9;

    // Use this for initialization
    void Start () {
        mSensorPtr = Marshal.AllocHGlobal(SENSORPTRCOUNT * sizeof(float));

        Input.gyro.enabled = true;
        GetRToCameraFromSO.initManager();
    }
	
	// Update is called once per frame
	void Update () {
        float[] sensorArr = new float[SENSORPTRCOUNT];
        GetRToCameraFromSO.getQuat(mSensorPtr);
        Marshal.Copy(mSensorPtr, sensorArr, 0, SENSORPTRCOUNT);

        /** 四元数 */
        Quaternion quat = new Quaternion(sensorArr[0], sensorArr[1], sensorArr[2], sensorArr[3]);


        /** 矩阵 */
        //Matrix4x4 matrix4 = new Matrix4x4();
        //matrix4.SetRow(0, new Vector4(sensorArr[0], sensorArr[1], sensorArr[2], 0));
        //matrix4.SetRow(1, new Vector4(sensorArr[3], sensorArr[4], sensorArr[5], 0));
        //matrix4.SetRow(2, new Vector4(sensorArr[6], sensorArr[7], sensorArr[8], 0));
        //matrix4.SetRow(3, new Vector4(0, 0, 0, 1));
        //Quaternion quat = GetRotation(matrix4);

        /** 欧拉角 */
        
        transform.rotation = quat;

        mchildTrans.rotation = quat;
    }
    /// <summary>
     /// 矩阵阵中提取旋转量
     /// </summary>
     /// <param name="matrix">RTS矩阵</param>
     /// <returns>旋转四元数</returns>
    public static Quaternion GetRotation(Matrix4x4 matrix)
    {
        float qw = Mathf.Sqrt(1f + matrix.m00 + matrix.m11 + matrix.m22) / 2;
        Debug.Log("GetRotation  " + qw + ", " + matrix.m00 + ", " + matrix.m11 + ", " + matrix.m22);
        float w = 4 * qw;
        float qx = (matrix.m21 - matrix.m12) / w;
        float qy = (matrix.m02 - matrix.m20) / w;
        float qz = (matrix.m10 - matrix.m01) / w;

        return new Quaternion(qx, qy, qz, qw);
    }
}

把libSensor.so放到Assets/Plugins/Android/libs/armeabi-v7a/libSensor.so 即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值