Beispiel #1
0
 Matrix4 GetHMDMatrixPoseEye(ref Valve.VR.CVRSystem HMD, Valve.VR.EVREye eye)
 {
     if (HMD == null)
     {
         return(new Matrix4());
     }
     Valve.VR.HmdMatrix34_t M = HMD.GetEyeToHeadTransform(eye);
     return(UtilOld.steamVRMatrixToMatrix4(M).Inverted());
 }
Beispiel #2
0
 Matrix4 GetHMDMatrixProjectionEye(ref Valve.VR.CVRSystem HMD, Valve.VR.EVREye eye)
 {
     if (HMD == null)
     {
         return(new Matrix4());
     }
     Valve.VR.HmdMatrix44_t M = HMD.GetProjectionMatrix(eye, mNearClip, mFarClip);
     return(UtilOld.steamVRMatrixToMatrix4(M));
 }
Beispiel #3
0
        private void initScene()
        {
            //OpenCV Cube init
            objectList = new List <MCvPoint3D32f>();
            for (int i = 0; i < _height; i++)
            {
                for (int j = 0; j < _width; j++)
                {
                    objectList.Add(new MCvPoint3D32f(j * _squareSize, i * _squareSize, 0.0F));
                }
            }

            axisPoints = new List <MCvPoint3D32f>();
            axisPoints.Add(new MCvPoint3D32f(0.0f, 0.0f, 0.0f));
            axisPoints.Add(new MCvPoint3D32f(3.0f, 0.0f, 0.0f));
            axisPoints.Add(new MCvPoint3D32f(0.0f, 3.0f, 0.0f));
            axisPoints.Add(new MCvPoint3D32f(0.0f, 0.0f, -3.0f));

            cubePoints = new List <MCvPoint3D32f>();
            cubePoints.Add(new MCvPoint3D32f(0.0f, 0.0f, 0.0f));
            cubePoints.Add(new MCvPoint3D32f(0.0f, 3.0f, 0.0f));
            cubePoints.Add(new MCvPoint3D32f(3.0f, 3.0f, 0.0f));
            cubePoints.Add(new MCvPoint3D32f(3.0f, 0.0f, 0.0f));
            cubePoints.Add(new MCvPoint3D32f(0.0f, 0.0f, -3.0f));
            cubePoints.Add(new MCvPoint3D32f(0.0f, 3.0f, -3.0f));
            cubePoints.Add(new MCvPoint3D32f(3.0f, 3.0f, -3.0f));
            cubePoints.Add(new MCvPoint3D32f(3.0f, 0.0f, -3.0f));

            //OpenGL objects init
            marker_cube_g = new Geometry.CubeGeometry(3.0f, 3.0f, -3.0f);
            marker_cube_m = new Material.TextureMaterial(mScene.rhinoDoc, "texture.jpg", false);

            controller_cube_g = new Geometry.CubeGeometry(0.05f, 0.05f, -0.05f);
            controller_cube_m = new Material.TextureMaterial(mScene.rhinoDoc, "texture.jpg", false);

            //TODO- how to deal with controllerPose ?
            //SceneNode controller_cube = new SceneNode("controller_cube", ref controller_cube_g, ref controller_cube_m); ;
            //mScene.staticGeometry.add(ref controller_cube);

            //we need eyepose before calibration
            if (mHMD == null)
            {
                mEyePosLeft = new Matrix4();
            }

            Valve.VR.HmdMatrix34_t M_L = mHMD.GetEyeToHeadTransform(Valve.VR.EVREye.Eye_Left);
            mEyePosLeft = UtilOld.steamVRMatrixToMatrix4(M_L).Inverted();
            Valve.VR.HmdMatrix34_t M_R = mHMD.GetEyeToHeadTransform(Valve.VR.EVREye.Eye_Right);
            mEyePosRight = UtilOld.steamVRMatrixToMatrix4(M_R).Inverted();
        }
Beispiel #4
0
        /**
         * Updates the poses of all tracked devices in the Matrix4 format.
         * Also handles new tracked devices, setting them up in the scene
         * and loading their render models.
         */
        void updateMatrixPose()
        {
            if (mHMD == null)
            {
                return;
            }

            OpenVR.Compositor.WaitGetPoses(mScene.mTrackedDevices, gamePoseArray);

            for (uint i = 0; i < mScene.mTrackedDevices.Length; i++)
            {
                var device = gamePoseArray[i];
                if (device.bPoseIsValid)
                {
                    mScene.mDevicePose[i] = UtilOld.steamVRMatrixToMatrix4(mScene.mTrackedDevices[i].mDeviceToAbsoluteTracking);
                    mHMD.GetTrackedDeviceClass(i);
                    if (mScene.mDeviceClassChar[i] == 0)
                    {
                        switch (mHMD.GetTrackedDeviceClass(i))
                        {
                        case ETrackedDeviceClass.Controller:
                            mScene.mDeviceClassChar[i] = 'C';
                            string name = UtilOld.GetTrackedDeviceString(ref mHMD, i, ETrackedDeviceProperty.Prop_RenderModelName_String);
                            if (name.ToLower().Contains("left"))
                            {
                                mScene.leftControllerIdx = (int)i;
                                // Uncomment to show controller model.
                                //Geometry.Geometry g = new Geometry.Geometry(@"C:/workspace/SparrowHawk/src/resources/external_controller01_left.obj");
                                //Material.Material m = new Material.RGBNormalMaterial(.5f);
                                //SceneNode s = new SceneNode("LeftControllerModel", ref g, ref m);
                                //s.transform = Util.createTranslationMatrix(-mScene.mLeftControllerOffset.M14, -mScene.mLeftControllerOffset.M24, -mScene.mLeftControllerOffset.M34);
                                //mScene.leftControllerNode.add(ref s);
                            }
                            else if (name.ToLower().Contains("right"))
                            {
                                mScene.rightControllerIdx = (int)i;
                            }
                            else if (mScene.leftControllerIdx < 0)
                            {
                                mScene.leftControllerIdx = (int)i;
                            }
                            else if (mScene.rightControllerIdx < 0)
                            {
                                mScene.rightControllerIdx = (int)i;
                            }
                            break;

                        case ETrackedDeviceClass.HMD: mScene.mDeviceClassChar[i] = 'H'; break;

                        case ETrackedDeviceClass.Invalid: mScene.mDeviceClassChar[i] = 'I'; break;

                        case ETrackedDeviceClass.GenericTracker: mScene.mDeviceClassChar[i] = 'G'; break;

                        case ETrackedDeviceClass.TrackingReference: mScene.mDeviceClassChar[i] = 'T'; break;

                        default: mScene.mDeviceClassChar[i] = '?'; break;
                        }
                    }
                }
            }

            if (gamePoseArray[OpenVR.k_unTrackedDeviceIndex_Hmd].bPoseIsValid)
            {
                mScene.mHMDPose = UtilOld.steamVRMatrixToMatrix4(gamePoseArray[OpenVR.k_unTrackedDeviceIndex_Hmd].mDeviceToAbsoluteTracking).Inverted();
            }

            if (mScene.leftControllerIdx > 0)
            {
                mScene.leftControllerNode.transform = mScene.mDevicePose[mScene.leftControllerIdx] * mScene.mLeftControllerOffset;
            }
            if (mScene.rightControllerIdx > 0)
            {
                mScene.rightControllerNode.transform = mScene.mDevicePose[mScene.rightControllerIdx] * mScene.mRightControllerOffset;
            }
        }