private void UpdateBlend(ProjectorDescription projector) { GameObject warpMeshObject = projector.warpMeshObject; if (this.showBlend) { warpMeshObject.renderer.material.SetTexture("_BlendTex", projector._targetBlendTexture); } else { warpMeshObject.renderer.material.SetTexture("_BlendTex", null); } }
protected void AllSlicesRendered(ProjectorDescription pd) { // Render a picture-in-picture of the depth buffer RenderTexture.active = pd._targetRenderTexture; GL.PushMatrix(); GL.LoadPixelMatrix(0, pd._targetRenderTexture.width, pd._targetRenderTexture.height, 0); Graphics.DrawTexture(new Rect(100, 100, 500, 400), this.projectorDepthBuffers[pd]); RenderTexture.active = null; GL.PopMatrix(); }
void CreateMeshesForSlaves() { // AH: Update this function so that it only creates meshes // if this is the correct slave node. Or we are forcing // all slave nodes to render. _sliceCameraParent.name = "Slice Cameras"; _sliceCameraParent.transform.parent = gameObject.transform; _sliceCameraParent.transform.localPosition = Vector3.zero; // Debug.Log("Number of projector meshes = " + _projectorMeshes.Count); foreach (ProjectorMesh projectorMesh in _projectorMeshes) { ProjectorDescription projector = new ProjectorDescription(projectorMesh, _projectorRenderTextureWidth, _projectorRenderTextureHeight, warpMeshPrefab, this.transform.FindChild("Cluster Manager")); _projectors.Add(projector); GameObject nodeParent = new GameObject(); string stereoTypeString = (projector.stereoType == ProjectorDescription.ProjectorStereoType.Left) ? "Left" : "Right"; nodeParent.name = "Node:" + projector.nodeNumber + " " + stereoTypeString; nodeParent.transform.parent = _sliceCameraParent.transform; nodeParent.transform.localPosition = Vector3.zero; _sliceCameraDescriptions = projector.CreateSliceCameras(sliceSeams, nodeParent, this, _masterCamera); foreach (SliceCameraDescription cameraDescription in _sliceCameraDescriptions) { if (ClusterManager.Instance.IsMaster) { cameraDescription.CameraObject.SetActive(false); } } UpdateTextures(projector); UpdateBlend(projector); // Create a camera for each slave that views the slave portion. projector.CreateDisplayCamera(gameObject, _orthoCameraTemplate); if (ClusterManager.Instance.IsMaster) { projector.ProjectorObject.SetActive(false); } } _masterCamera.camera.enabled = true; }
private void UpdateTextures(ProjectorDescription projector) { GameObject warpMeshObject = projector.warpMeshObject; if (showGrid) { // Use grid instead of showing scene if (projector.stereoType == ProjectorDescription.ProjectorStereoType.Left) { //Debug.Log("Set Left Eye to Grid"); warpMeshObject.GetComponent <RefreshTextureScript> ().toReplace = leftEyeGrid; Vector2 texScale = new Vector2(projector.ProjectorMesh.MeshEnd - projector.ProjectorMesh.MeshStart, 1.0f); warpMeshObject.renderer.material.mainTextureScale = texScale; Vector2 texOffset = new Vector2(projector.ProjectorMesh.MeshStart, 0.0f); warpMeshObject.renderer.material.mainTextureOffset = texOffset; } else { //Debug.Log("Set Right Eye to Grid"); warpMeshObject.GetComponent <RefreshTextureScript> ().toReplace = rightEyeGrid; Vector2 texScale = new Vector2(projector.ProjectorMesh.MeshEnd - projector.ProjectorMesh.MeshStart, 1.0f); Vector2 texOffset = new Vector2(projector.ProjectorMesh.MeshStart, 0.0f); warpMeshObject.renderer.material.mainTextureScale = texScale; warpMeshObject.renderer.material.mainTextureOffset = texOffset; } } else { warpMeshObject.GetComponent <RefreshTextureScript> ().toReplace = projector._targetRenderTexture; warpMeshObject.renderer.material.mainTextureScale = new Vector2(1.0f, 1.0f); warpMeshObject.renderer.material.mainTextureOffset = new Vector2(0, 0); foreach (SliceCameraDescription cameraDescription in _sliceCameraDescriptions) { // Camera camera = cameraDescription.CameraObject.camera; cameraDescription.ComputeProjection(cameraAngle, renderRadius, renderHeight, eyeWidth, eyeHeight, sliceWidth); cameraDescription.ComputeViewport(Screen.width); //cameraDescription.SetRenderLayer(modelLayer); } } }
void StartRenderSystem() { // In case the render system already exists, detroy it ShutdownRenderSystem(); this.setDisplayConfiguration(); // AH: Read in the warp mesh. This only reads in the // warp meshes relevant for this IG? ReadWarpMesh(); // Establish exactly how many and where the slices and seams are sliceSeams = new float[_numSlicesPerIG * _numIGs]; sliceWidth = 1.0f / (_numSlicesPerIG * _numIGs); for (int i = 0; i < sliceSeams.Length; i++) { sliceSeams [i] = sliceWidth * (float)i; } cameraAngle = 360.0f / (float)(sliceSeams.Length); // Debug.Log("Each slice camera looks at " + (sliceSeams.Length).ToString() + "th of the AVIE, which is " + cameraAngle.ToString() + " degrees."); _sliceCameraParent = new GameObject(); CreateMeshesForSlaves(); // // Organize Meshes in appropriate manner // based on flags // // Arrange the projector displays in a grid // // If displaying all displays. Arrange them appropriately // if (_internalDisplayConfiguration == DisplayConfigurations.MASTER) { // There should only be two projectors per slave ProjectorDescription leftProjector = _projectors [0]; leftProjector._orthographicCamera.SetActive(false); leftProjector.warpMeshObject.SetActive(true); ProjectorDescription rightProjector = _projectors [1]; rightProjector._orthographicCamera.SetActive(false); rightProjector.warpMeshObject.SetActive(true); _masterCamera.camera.enabled = true; } else if (_internalDisplayConfiguration == DisplayConfigurations.LEFT_BLANK) { // There should only be two projectors per slave ProjectorDescription leftProjector = _projectors [0]; leftProjector._orthographicCamera.camera.rect = new Rect(0, 0, 0.5f, 1.0f); leftProjector._orthographicCamera.SetActive(true); leftProjector.warpMeshObject.SetActive(true); ProjectorDescription rightProjector = _projectors [1]; rightProjector._orthographicCamera.SetActive(false); rightProjector.warpMeshObject.SetActive(false); _masterCamera.camera.enabled = false; } else if (_internalDisplayConfiguration == DisplayConfigurations.BLANK_RIGHT) { // There should only be two projectors per slave ProjectorDescription leftProjector = _projectors [0]; leftProjector._orthographicCamera.SetActive(false); leftProjector.warpMeshObject.SetActive(false); ProjectorDescription rightProjector = _projectors [1]; rightProjector._orthographicCamera.camera.rect = new Rect(0.5f, 0, 0.5f, 1.0f); rightProjector._orthographicCamera.SetActive(true); rightProjector.warpMeshObject.SetActive(true); _masterCamera.camera.enabled = false; } else if (_internalDisplayConfiguration == DisplayConfigurations.LEFT_RIGHT) { // There should only be two projectors per slave ProjectorDescription leftProjector = _projectors [0]; leftProjector._orthographicCamera.camera.rect = new Rect(0, 0, 0.5f, 1.0f); leftProjector._orthographicCamera.SetActive(true); leftProjector.warpMeshObject.SetActive(true); ProjectorDescription rightProjector = _projectors [1]; rightProjector._orthographicCamera.camera.rect = new Rect(0.5f, 0, 0.5f, 1.0f); rightProjector._orthographicCamera.SetActive(true); rightProjector.warpMeshObject.SetActive(true); _masterCamera.camera.enabled = false; } else if (_internalDisplayConfiguration == DisplayConfigurations.MULTI_VIEW) { float screenWidth = 1.0f / 6.0f; float screenHeight = 0.5f; for (int i = 0; i < 11; i += 2) { float x_offset = i / 2 * screenWidth; // There should only be two projectors per slave ProjectorDescription leftProjector = _projectors [i]; leftProjector._orthographicCamera.camera.rect = new Rect(x_offset, 0, screenWidth, screenHeight); leftProjector._orthographicCamera.SetActive(true); leftProjector.warpMeshObject.SetActive(true); ProjectorDescription rightProjector = _projectors [i + 1]; rightProjector._orthographicCamera.camera.rect = new Rect(x_offset, screenHeight, screenWidth, screenHeight); rightProjector._orthographicCamera.SetActive(true); rightProjector.warpMeshObject.SetActive(true); } _masterCamera.camera.enabled = false; } else if (_internalDisplayConfiguration == DisplayConfigurations.DOUBLE_IG) { float screenWidth = 1.0f / 4.0f; float screenHeight = 1.0f; for (int i = 0; i < 4; i += 2) { float x_offset = i / 4f; // There should only be two projectors per slave ProjectorDescription leftProjector = _projectors [i]; leftProjector._orthographicCamera.camera.rect = new Rect(x_offset, 0, screenWidth, screenHeight); leftProjector._orthographicCamera.SetActive(true); leftProjector.warpMeshObject.SetActive(true); x_offset = (i + 1f) / 4f; ProjectorDescription rightProjector = _projectors [i + 1]; rightProjector._orthographicCamera.camera.rect = new Rect(x_offset, 0, screenWidth, screenHeight); rightProjector._orthographicCamera.SetActive(true); rightProjector.warpMeshObject.SetActive(true); } _masterCamera.camera.enabled = false; } else if (_internalDisplayConfiguration == DisplayConfigurations.TRIPLE_IG) { float screenWidth = 1.0f / 3.0f; float screenHeight = 0.5f; for (int i = 0; i < 5; i += 2) { float x_offset = i / 2 * screenWidth; // There should only be two projectors per slave ProjectorDescription leftProjector = _projectors [i]; leftProjector._orthographicCamera.camera.rect = new Rect(x_offset, 0, screenWidth, screenHeight); leftProjector._orthographicCamera.SetActive(true); leftProjector.warpMeshObject.SetActive(true); ProjectorDescription rightProjector = _projectors [i + 1]; rightProjector._orthographicCamera.camera.rect = new Rect(x_offset, screenHeight, screenWidth, screenHeight); rightProjector._orthographicCamera.SetActive(true); rightProjector.warpMeshObject.SetActive(true); } _masterCamera.camera.enabled = false; } InitialCameraSettings ics = this.GetComponent <InitialCameraSettings> (); if (ics != null) { ics.ExecuteInitialCameraSettings(); } }