private void UpdateSmartTerrain(VuforiaManagerImpl.FrameState frameState, StateManagerImpl stateManager) { SmartTerrainTracker tracker = TrackerManager.Instance.GetTracker <SmartTerrainTracker>(); if (tracker != null && tracker.SmartTerrainBuilder.GetReconstructions().Any <ReconstructionAbstractBehaviour>()) { VuforiaManagerImpl.SmartTerrainRevisionData[] array = new VuforiaManagerImpl.SmartTerrainRevisionData[frameState.numSmartTerrainRevisions]; VuforiaManagerImpl.SurfaceData[] array2 = new VuforiaManagerImpl.SurfaceData[frameState.numUpdatedSurfaces]; VuforiaManagerImpl.PropData[] array3 = new VuforiaManagerImpl.PropData[frameState.numUpdatedProps]; for (int i = 0; i < frameState.numSmartTerrainRevisions; i++) { VuforiaManagerImpl.SmartTerrainRevisionData smartTerrainRevisionData = (VuforiaManagerImpl.SmartTerrainRevisionData)Marshal.PtrToStructure(new IntPtr(frameState.smartTerrainRevisionsArray.ToInt64() + (long)(i * Marshal.SizeOf(typeof(VuforiaManagerImpl.SmartTerrainRevisionData)))), typeof(VuforiaManagerImpl.SmartTerrainRevisionData)); array[i] = smartTerrainRevisionData; } for (int j = 0; j < frameState.numUpdatedSurfaces; j++) { VuforiaManagerImpl.SurfaceData surfaceData = (VuforiaManagerImpl.SurfaceData)Marshal.PtrToStructure(new IntPtr(frameState.updatedSurfacesArray.ToInt64() + (long)(j * Marshal.SizeOf(typeof(VuforiaManagerImpl.SurfaceData)))), typeof(VuforiaManagerImpl.SurfaceData)); array2[j] = surfaceData; } for (int k = 0; k < frameState.numUpdatedProps; k++) { VuforiaManagerImpl.PropData propData = (VuforiaManagerImpl.PropData)Marshal.PtrToStructure(new IntPtr(frameState.updatedPropsArray.ToInt64() + (long)(k * Marshal.SizeOf(typeof(VuforiaManagerImpl.PropData)))), typeof(VuforiaManagerImpl.PropData)); array3[k] = propData; } ((SmartTerrainBuilderImpl)tracker.SmartTerrainBuilder).UpdateSmartTerrainData(array, array2, array3); } }
private void UnmarshalTrackables(VuforiaManagerImpl.FrameState frameState) { for (int i = 0; i < frameState.numTrackableResults; i++) { VuforiaManagerImpl.TrackableResultData trackableResultData = (VuforiaManagerImpl.TrackableResultData)Marshal.PtrToStructure(new IntPtr(frameState.trackableDataArray.ToInt64() + (long)(i * Marshal.SizeOf(typeof(VuforiaManagerImpl.TrackableResultData)))), typeof(VuforiaManagerImpl.TrackableResultData)); this.mTrackableResultDataArray[i] = trackableResultData; } for (int j = 0; j < frameState.numPropTrackableResults; j++) { VuforiaManagerImpl.TrackableResultData trackableResultData2 = (VuforiaManagerImpl.TrackableResultData)Marshal.PtrToStructure(new IntPtr(frameState.propTrackableDataArray.ToInt64() + (long)(j * Marshal.SizeOf(typeof(VuforiaManagerImpl.TrackableResultData)))), typeof(VuforiaManagerImpl.TrackableResultData)); this.mTrackableResultDataArray[frameState.numTrackableResults + j] = trackableResultData2; } }
private void UnmarshalVuMarkTrackables(VuforiaManagerImpl.FrameState frameState) { this.mVuMarkDataArray = new VuforiaManagerImpl.VuMarkTargetData[frameState.numNewVuMarks]; for (int i = 0; i < frameState.numNewVuMarks; i++) { IntPtr ptr = new IntPtr(frameState.newVuMarkDataArray.ToInt64() + (long)(i * Marshal.SizeOf(typeof(VuforiaManagerImpl.VuMarkTargetData)))); this.mVuMarkDataArray[i] = (VuforiaManagerImpl.VuMarkTargetData)Marshal.PtrToStructure(ptr, typeof(VuforiaManagerImpl.VuMarkTargetData)); } this.mVuMarkResultDataArray = new VuforiaManagerImpl.VuMarkTargetResultData[frameState.numVuMarkResults]; for (int j = 0; j < frameState.numVuMarkResults; j++) { IntPtr ptr2 = new IntPtr(frameState.vuMarkResultArray.ToInt64() + (long)(j * Marshal.SizeOf(typeof(VuforiaManagerImpl.VuMarkTargetResultData)))); this.mVuMarkResultDataArray[j] = (VuforiaManagerImpl.VuMarkTargetResultData)Marshal.PtrToStructure(ptr2, typeof(VuforiaManagerImpl.VuMarkTargetResultData)); } }
private void UpdateTrackers(VuforiaManagerImpl.FrameState frameState) { this.UnmarshalTrackables(frameState); this.UnmarshalWordTrackables(frameState); this.UnmarshalVuMarkTrackables(frameState); this.UpdateTrackableFoundQueue(); StateManagerImpl stateManagerImpl = (StateManagerImpl)TrackerManager.Instance.GetStateManager(); this.UpdateSmartTerrain(frameState, stateManagerImpl); this.UpdateExtendedTrackedVuMarks(); stateManagerImpl.UpdateVuMarks(this.mVuMarkDataArray, this.mVuMarkResultDataArray); VuforiaManager.TrackableIdPair trackableIdPair = new VuforiaManager.TrackableIdPair { ResultId = -1, TrackableId = -1 }; int num = -1; if (this.mWorldCenterMode == VuforiaARController.WorldCenterMode.SPECIFIC_TARGET) { if (this.mVuMarkWorldCenter != null && this.mVuMarkWorldCenter.VuMarkTemplate != null) { this.mWorldCenter = this.GetVuMarkWorldCenter(this.mVuMarkWorldCenter.VuMarkTemplate.ID); } if (this.mWorldCenter != null && this.mWorldCenter.Trackable != null) { if (this.mWorldCenter is VuMarkAbstractBehaviour) { trackableIdPair.ResultId = ((VuMarkAbstractBehaviour)this.mWorldCenter).VuMarkResultId; } else { trackableIdPair.TrackableId = this.mWorldCenter.Trackable.ID; } } } else if (this.mWorldCenterMode == VuforiaARController.WorldCenterMode.FIRST_TARGET) { stateManagerImpl.RemoveDisabledTrackablesFromQueue(ref this.mTrackableFoundQueue); if (this.mTrackableFoundQueue.Count > 0) { trackableIdPair = this.mTrackableFoundQueue.First.Value; } } else if (this.mWorldCenterMode == VuforiaARController.WorldCenterMode.DEVICE_TRACKING) { num = frameState.deviceTrackableId; } DeviceTrackingManager deviceTrackingManager = stateManagerImpl.GetDeviceTrackingManager(); if (num != -1) { deviceTrackingManager.UpdateCamera(this.mCentralAnchorPoint, this.mTrackableResultDataArray, num); } else { RotationalPlayModeDeviceTrackerImpl rotationalPlayModeDeviceTrackerImpl = TrackerManager.Instance.GetTracker <DeviceTracker>() as RotationalPlayModeDeviceTrackerImpl; if (rotationalPlayModeDeviceTrackerImpl != null && rotationalPlayModeDeviceTrackerImpl.IsActive) { VuforiaManagerImpl.TrackableResultData trackable = rotationalPlayModeDeviceTrackerImpl.GetTrackable(); deviceTrackingManager.UpdateCamera(this.mCentralAnchorPoint, new VuforiaManagerImpl.TrackableResultData[] { trackable }, trackable.id); } else if (trackableIdPair.TrackableId >= 0 || trackableIdPair.ResultId >= 0) { VuforiaManagerImpl.TrackableResultData trackableResultData = this.GetTrackableResultData(trackableIdPair, true); if (VuforiaManagerImpl.IsDetectedOrTracked(trackableResultData.status)) { stateManagerImpl.UpdateCameraPoseWRTTrackable(this.mCentralAnchorPoint, this.mParentAnchorPoint, trackableIdPair, trackableResultData.pose); } } } if (this.mARCameraTransform != this.mCentralAnchorPoint) { this.mARCameraTransform.position = this.mCentralAnchorPoint.position; this.mARCameraTransform.rotation = this.mCentralAnchorPoint.rotation; } stateManagerImpl.UpdateTrackablePoses(this.mARCameraTransform, this.mTrackableResultDataArray, this.mVuMarkResultDataArray, trackableIdPair, frameState.frameIndex); stateManagerImpl.UpdateWords(this.mARCameraTransform, this.mWordDataArray, this.mWordResultDataArray); stateManagerImpl.UpdateVirtualButtons(frameState.numVirtualButtonResults, frameState.vbDataArray); }
internal bool Update(ScreenOrientation counterRotation, bool reapplyOldState) { bool flag = true; if (this.mPaused) { flag = false; } else { if (!VuforiaRuntimeUtilities.IsVuforiaEnabled()) { this.UpdateTrackablesEditor(); return(true); } this.UpdateImageContainer(); if (VuforiaRuntimeUtilities.IsPlayMode() && ((CameraDeviceImpl)CameraDevice.Instance).WebCam.DidUpdateThisFrame) { this.InjectCameraFrame(); } if (TrackerManager.Instance.GetTracker <DeviceTracker>() != null && TrackerManager.Instance.GetTracker <DeviceTracker>().IsActive) { reapplyOldState = true; } if (VuforiaWrapper.Instance.UpdateQCAR(this.mImageHeaderData, this.mNumImageHeaders, this.mLastProcessedFrameStatePtr, (int)counterRotation) == 0) { flag = false; } else { if (this.mDiscardStatesForRendering > 0) { this.mDiscardStatesForRendering--; } this.mFrameState = (VuforiaManagerImpl.FrameState)Marshal.PtrToStructure(this.mLastProcessedFrameStatePtr, typeof(VuforiaManagerImpl.FrameState)); if (this.mFrameState.frameIndex < 0) { flag = false; } } } if (flag | reapplyOldState) { if (this.mARCameraTransform != this.mCentralAnchorPoint) { this.mARCameraTransform.position = this.mCentralAnchorPoint.position; this.mARCameraTransform.rotation = this.mCentralAnchorPoint.rotation; } this.InitializeTrackableContainer(this.mFrameState.numTrackableResults + this.mFrameState.numPropTrackableResults); if (flag) { this.UpdateCameraFrame(); } this.UpdateTrackers(this.mFrameState); if (flag) { if (VuforiaRuntimeUtilities.IsPlayMode()) { ((CameraDeviceImpl)CameraDevice.Instance).WebCam.RenderFrame(this.mFrameState.frameIndex); } if (this.mFrameState.frameIndex != this.mLastFrameIdx) { this.mVideoBackgroundNeedsRedrawing = true; this.mLastFrameIdx = this.mFrameState.frameIndex; } } } return(flag); }