首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EasyAR sdk与Intel Realsense SDK发行

EasyAR sdk与Intel Realsense SDK发行
EN

Stack Overflow用户
提问于 2016-10-18 02:41:07
回答 1查看 567关注 0票数 0

我在我的项目中同时使用英特尔realsense和EasyAR sdk时出现了这个错误。我的想法是增加一个三维物体,并使用英特尔realsense相机,手势跟踪移动它。请帮帮忙。

对象引用未设置为对象的实例( C:/buildslave/unity/build/Editor/Mono/GUI/DockArea.cs:272) PXCMSenseManager:PXCMSenseManager_Init(IntPtr,IntPtr) PXCMSenseManager:Init(Handler) PXCMSenseManager:Init() EasyAR.RealityPlaneBehaviour:Start() (at Assets/EasyAR/Scripts/RealityPlaneBehaviour.cs:51)** )

我正在使用两个SDKS提供的示例代码。把它们合并到一个项目中。我成功地增强了三维物体,但无法通过手势跟踪移动三维物体。

这是我正在使用的代码:

代码语言:javascript
复制
using UnityEngine;
using System.Collections;

namespace EasyAR
{
    public class RealityPlaneBehaviour : RealityPlaneBaseBehaviour
    {

        public GameObject Paddle1;
        public GameObject Paddle2;
        private PXCMSenseManager _pxcmSenseManager;
        private PXCMHandModule _pxcmHandModule;
        private PXCMHandData handData;
        private pxcmStatus status;

        // Use this for initialization
        private void Start()
        {
            _pxcmSenseManager = PXCMSenseManager.CreateInstance();


            if (_pxcmSenseManager == null)
            {
                Debug.LogError("SenseManager Initialization Failed");
            }
            else
            {
                //pxcmStatus pxcmResult = _pxcmSenseManager.EnableHand();
                pxcmStatus pxcmResult = _pxcmSenseManager.EnableHand();
                if (pxcmResult != pxcmStatus.PXCM_STATUS_NO_ERROR)
                {
                    Debug.LogError("EnableHand: " + pxcmResult);
                }
                else
                {
                    Debug.LogError("Reached Here:1 " + pxcmResult);
                    _pxcmHandModule = _pxcmSenseManager.QueryHand();
                    Debug.LogError("Reached Here:1 " + _pxcmHandModule.ToString());
                    handData = _pxcmHandModule.CreateOutput();
                    Debug.LogError("Reached Here:1 " + handData.ToString());
                    if(_pxcmHandModule == null)
                    {
                        Debug.LogError("PxcmHandModule is null during Setup");
                        return;
                    }   
                    _pxcmSenseManager.Init();

                    PXCMHandConfiguration configuration = _pxcmHandModule.CreateActiveConfiguration();
                    configuration.EnableAllGestures();
                    configuration.ApplyChanges();
                    configuration.Dispose();



                }
            }
        }


        // Update is called once per frame
        private void Update()
        {
            if (_pxcmSenseManager == null)
            {
                Debug.LogError("PxcmSenseManager is null");
                return;
            }

            _pxcmSenseManager.AcquireFrame(false, 0);

            status = _pxcmSenseManager.AcquireFrame(true);
            if (status != pxcmStatus.PXCM_STATUS_NO_ERROR) 
                return;

            _pxcmHandModule = _pxcmSenseManager.QueryHand();
            if(_pxcmHandModule == null)
            {
                Debug.LogError("PxcmHandModule is null");
                return;
            }   

            PXCMHandData handData = _pxcmHandModule.CreateOutput();
            handData.Update();

            MoveBall(handData, PXCMHandData.AccessOrderType.ACCESS_ORDER_LEFT_HANDS, Paddle1);
            MoveBall(handData, PXCMHandData.AccessOrderType.ACCESS_ORDER_RIGHT_HANDS, Paddle2);

            _pxcmSenseManager.ReleaseFrame();
        }

        private void MoveBall(PXCMHandData handData, PXCMHandData.AccessOrderType accessOrderType, GameObject gameObject)
        {
            // Get first hand data (index 0),
            PXCMHandData.IHand pxcmHandData;


            if (handData.QueryHandData(accessOrderType, 0, out pxcmHandData) == pxcmStatus.PXCM_STATUS_NO_ERROR)
            {
                PXCMHandData.JointData jointData;
                if (pxcmHandData.QueryTrackedJoint(PXCMHandData.JointType.JOINT_CENTER, out jointData) ==
                    pxcmStatus.PXCM_STATUS_NO_ERROR)
                {   
                    gameObject.GetComponent<Rigidbody>().velocity = new Vector3(-9, jointData.positionWorld.y*100f, 0);
                }
            }
        }

        private void OnDisable()
        {
            _pxcmHandModule.Dispose();
            _pxcmSenseManager.Dispose();
        }







    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-18 03:07:56

这是一个读/写问题,因为在安装Realsense SDK时,它安装在一个受保护的目录(C:/Program Files)中,您通常没有写入权限。

重新安装Realsense,但这一次,将安装目录更改为C:/RealsenseSDK。权限问题应该消失了,您将不再获得对象引用异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40098661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档