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()); }
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)); }
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(); }
/** * 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; } }