public void InitRenderSystem() { //Get realworld camera image DualCameraL.clearFlags = CameraClearFlags.SolidColor; DualCameraL.backgroundColor = Color.clear; _dualCameraLRT = DualCameraL.gameObject.AddComponent <CopyCameraImage>(); _dualCameraLRT.rtRefreshCallback = LDualCamRTRefreshCallback; DualCameraR.clearFlags = CameraClearFlags.SolidColor; DualCameraR.backgroundColor = Color.clear; _dualCameraRRT = DualCameraR.gameObject.AddComponent <CopyCameraImage>(); _dualCameraRRT.rtRefreshCallback = RDualCamRTRefreshCallback; //Create None DepthTest Camera, which is clear the depth buffer ,and render mesh on screen top. _createRenderOnTopCamera(); #if ADVANCE_RENDER advanceRender.InitRenderSystem(_dualCameraLRT, _dualCameraRRT); #endif foreach (Transform t in unityrenderWithDepthObject) { MyHelpLayer.SetSceneLayer(t, ARRender.UnityRenderWithDepthLayer); } foreach (Transform t in unityrenderWithDepthNoShadowObject) { MyHelpLayer.SetSceneLayer(t, ARRender.UnityRenderWithDepthNoShadowLayer); } }
public void RecoverUnityrenderWithDepthLayer() { foreach (Transform t in unityrenderWithDepthObject) { MyHelpLayer.SetSceneLayer(t, UnityRenderWithDepthLayer); } }
public void SetUnityrenderWithDepthToTopLayer() { foreach (Transform t in unityrenderWithDepthObject) { MyHelpLayer.SetSceneLayer(t, UnityRenderOnTopLayer); } }
public void AddUnityrenderWithDepth(Transform t) { if (unityrenderWithDepthObject.IndexOf(t) < 0) { unityrenderWithDepthObject.Add(t); MyHelpLayer.SetSceneLayer(t, UnityRenderWithDepthLayer); } }
IEnumerator _closeRenderAlphaWall() { yield return(new WaitForSeconds(4)); for (int a = 0; a < selectedWallRoot.transform.childCount; a++) { Transform child = selectedWallRoot.transform.GetChild(a); ARRender.Instance.RemoveUnityrenderWithDepth(child); MyHelpLayer.SetSceneLayer(child, ARRender.MRReconstructObjectLayer); } }
public void StartGarageSetting() { VivePoseTracker tracker = LiftMachine.GetComponent <VivePoseTracker>(); if (tracker.isPoseValid) { LiftMachine.position = tracker.transform.position; } //else if (recontructFloor != null && recontructFloor.transform.childCount > 0) // LiftMachinePosition = recontructFloor.transform.GetChild(0).position; else { LiftMachine.position = Vector3.zero; } if (ARRender.ADVANCE_RENDER) { //We only set PaintObject to render shadow to save shadow render performance MyHelpLayer.ReplaceSceneLayer(LiftMachine, LayerMask.NameToLayer("Default"), ARRender.UnityRenderOnTopLayer); MyHelpLayer.ReplaceSceneLayer(LiftMachine, LayerMask.NameToLayer("PaintObject"), ARRender.UnityRenderOnTopLayer); } else { MyHelpLayer.SetSceneLayer(LiftMachine, ARRender.UnityRenderOnTopLayer); } FixedWorldPosCover[] fwpcs = LiftMachine.GetComponentsInChildren <FixedWorldPosCover>(); foreach (FixedWorldPosCover fwpc in fwpcs) { fwpc.UpdateWorldMatrix(); // fwpc.GetComponent<Renderer>().sharedMaterial.SetTexture("_LeftEyeTexture", dualCameraLRT.GetRT()); // fwpc.GetComponent<Renderer>().sharedMaterial.SetTexture("_RightEyeTexture", dualCameraRRT.GetRT()); fwpc.GetComponent <Renderer>().sharedMaterial.SetFloat("_Transparent", 1); } Renderer[] renders = LiftMachine.GetComponentsInChildren <Renderer>(true); foreach (Renderer r in renders) { r.enabled = true; } }
public void UpdateState() { if (manager.PadTouchL) { robotController.TurnLeft(); } else if (manager.PadTouchR) { robotController.TurnRight(); } if (manager.PadKeyUp) { robotController.Stop(); } if (manager.PadPressL && manager.PadIsFirstPress || manager.PadPressR && manager.PadIsFirstPress) { robotController.SwitchDiscoLight(); } if (robotController.GetDiscoLightRoot().gameObject.activeSelf) { MyHelpLayer.SetSceneLayer(robotController.GetDiscoLightRoot(), ARRender.UnityRenderWithDepthNoShadowLayer); } if (manager.PadPressUpward) { //robotController.MoveForwrad(); robotController.stallHigh += Time.deltaTime * 0.9f; robotController.stallHigh = Mathf.Clamp(robotController.stallHigh, 0.5f, 10); } else if (manager.PadPressDownward) { //robotController.MoveBack(); robotController.stallHigh -= Time.deltaTime * 0.9f; robotController.stallHigh = Mathf.Clamp(robotController.stallHigh, 0.5f, 10); } float triggerRatio = ViveInput.GetTriggerValue(HandRole.RightHand); if (triggerRatio > 0) { if (robotController != null) { robotController.MoveForwrad(triggerRatio); } //Debug.Log("tvalue : " + tvalue); } if (GameManager.Instance.ViveIsGrip()) { manager.SwitchState(GameStateManager.GameState.GARAGE); } //Recover to idle state if (ViveInput.GetPressUp(HandRole.RightHand, ControllerButton.Trigger) || triggerRatio < 0.01f) { robotController.Stop(); } }
public void StartPaintBallWallGame() { //if (PaintBallWallGameSizePlaneOrigScale == null) // PaintBallWallGameSizePlaneOrigScale = PaintBallWallGameSizePlane.lossyScale.z; float origW = measureSizeQuad.transform.lossyScale.x; //2.8f;// original W, H is 2.8 , 1.6 origW = origW * 3f / 7f; // 3x2 block size of 7x4 size Vector3 newNearPoint, newFarPoint; //PaintBallWallGameObj.SetActive(true); Debug.LogWarning("[StartPaintBallWallGame]"); float localScale = 1; Transform fishHidingWall = fishAI.fishHidingWall; if (fishHidingWall == null) { fishHidingWall = ReconstructManager.Instance.selectedWallRoot.transform.GetChild(0); } //float areaQuadMax, areaQuadMin; //Mesh quadMesh = fishHidingWall.GetChild(0).GetComponent<MeshFilter>().sharedMesh; Mesh quadMesh = fishHidingWall.GetComponent <MeshFilter>().sharedMesh; Transform quadTransform = fishHidingWall;//.GetChild(0); float destW = 0; if (fishHidingWall != null) { PaintBallWallGameLocation.position = fishHidingWall.position; //PaintBallWallGameLocation.rotation = fishHidingWall.rotation; PaintBallWallGameLocation.LookAt( fishHidingWall.position + GetFaceToPlayerNormal(fishHidingWall.position, fishHidingWall.forward), Vector3.up); //Fit quad align with height //Because the game quad is W:(10m*0.7), H:(10m*0.4), so fit the height with quadMesh's height /*areaQuadMax = -9999; * areaQuadMin = 9999f; * foreach (Vector3 vec in quadMesh.vertices) * { * //Z is the width * Vector3 vecWorld = fishHidingWall.TransformPoint(vec); * if (vecWorld.z > areaQuadMax) * areaQuadMax = vecWorld.z; * if (vecWorld.z < areaQuadMin) * areaQuadMin = vecWorld.z; * }*/ List <Vector3> widthList = new List <Vector3>(); for (int a = 0; a < quadMesh.vertices.Length; a++)// ( in quadMesh.vertices) { Vector3 vec = quadMesh.vertices[a]; vec = quadTransform.TransformPoint(vec); vec.y = 0; widthList.Add(vec); } MyHelpMesh.GetLongestLineFromVertices(widthList, null, out newNearPoint, out newFarPoint); destW = (newNearPoint - newFarPoint).magnitude; localScale = destW / origW; //Z is the width //Furthermore consider the area ratio float areaQuad = ReconstructManager.GetMeshArea(quadMesh); float areaConvex = ReconstructManager.GetMeshArea(fishHidingWall.GetComponent <MeshFilter>().sharedMesh); localScale *= areaConvex / areaQuad; } trackerOfMRWall.position = PaintBallWallGameLocation.position + PaintBallWallGameLocation.forward * 0.01f; Vector3 lookForward = PaintBallWallGameLocation.forward; lookForward.y = 0; trackerOfMRWall.LookAt(PaintBallWallGameLocation.position + lookForward.normalized, Vector3.up); localScale = Mathf.Clamp(localScale * 0.8f, 0.1f, 1.2f);//limit the max size trackerOfMRWall.localScale = Vector3.one * localScale; //Get the top offset to align with top edge //areaQuadMax = -9999; //areaQuadMin = 9999f; //foreach (Vector3 vec in quadMesh.vertices) //{ // //X is the height // Vector3 vecWorld = quadTransform.TransformPoint(vec); // if (vecWorld.y > areaQuadMax) // areaQuadMax = vecWorld.y; // if (vecWorld.y < areaQuadMin) // areaQuadMin = vecWorld.y; //} List <Vector3> heightList = new List <Vector3>(); for (int a = 0; a < quadMesh.vertices.Length; a++)// ( in quadMesh.vertices) { Vector3 vec = quadMesh.vertices[a]; vec = quadTransform.TransformPoint(vec); vec.x = 0; vec.z = 0; heightList.Add(vec); } //float destH = areaQuadMax - areaQuadMin; MyHelpMesh.GetLongestLineFromVertices(heightList, null, out newNearPoint, out newFarPoint); float destH = (newNearPoint - newFarPoint).magnitude; float origH = measureSizeQuad.transform.lossyScale.y; //1.6f * localScale;// original W, H is 2.8 , 1.6 origH = origH * 2f / 4f; // 3x2 block size of 7x4 size float offsetH = (destH - origH) * 0.5f; //float ratio = destH / destW; trackerOfMRWall.position = new Vector3(trackerOfMRWall.position.x, trackerOfMRWall.position.y + offsetH * 0.6f, trackerOfMRWall.position.z); //set health position Vector3 dir = PaintBallWallGameLocation.position - ARRender.Instance.VRCamera.transform.position; dir.y = 0; dir.Normalize(); // float length = dir.magnitude; trackerOfHealth.position = ARRender.Instance.VRCamera.transform.position + dir * 1f; trackerOfHealth.LookAt(ARRender.Instance.VRCamera.transform, Vector3.up); ARRender.Instance.AddUnityrenderWithDepth(trackerOfHealth); if (ARRender.ADVANCE_RENDER) { //We only set PaintObject to render shadow to save shadow render performance MyHelpLayer.ReplaceSceneLayer(trackerOfMRWall, LayerMask.NameToLayer("Default"), ARRender.UnityRenderOnTopNoShadowLayer); MyHelpLayer.ReplaceSceneLayer(trackerOfMRWall, LayerMask.NameToLayer("PaintObject"), ARRender.UnityRenderOnTopLayer); } else { MyHelpLayer.SetSceneLayer(trackerOfMRWall, ARRender.UnityRenderOnTopLayer); } paintBallStateManger.SetState((int)PaintBallStateManager.PaintBallStateEnum.WAIT_USER_TRIGGER); MRWallManager.instance.ResetMRWall(); //Set directional light ARRender.Instance.SetDirectionalLight(fishHidingWall); }