public SliceCameraDescription(int id, float angle, float leftSeam, float rightSeam, ProjectorDescription projector, GameObject parent, Camera copyFrom) { this.id = id; this.angleDegrees = angle; this.leftSeam = leftSeam; this.rightSeam = rightSeam; this.projector = projector; sliceName = "Slave(" + (projector.ProjectorMesh.Id / 2) + ")." + (projector.stereoType == ProjectorDescription.ProjectorStereoType.Left ? ".LeftProjector" : ".RightProjector") + ".SliceCam(" + id + ")"; cameraObject = new GameObject(sliceName); cameraObject.AddComponent <Camera>(); cameraObject.camera.transform.parent = parent.transform; //cameraObject.AddComponent<CameraLines>(); //use this for easy way of getting lines // Set up render path cameraObject.camera.depthTextureMode = DepthTextureMode.Depth; cameraObject.camera.renderingPath = RenderingPath.Forward; // We will manually call .render on these cameras cameraObject.camera.enabled = false; this.CopyFrom(copyFrom); }
public SliceCameraDescription(int id, float angle, float leftSeam, float rightSeam, ProjectorDescription projector, GameObject parent, Camera copyFrom) { this.id = id; this.angleDegrees = angle; this.leftSeam = leftSeam; this.rightSeam = rightSeam; this.projector = projector; sliceName = "Slave(" + (projector.ProjectorMesh.Id / 2) + ")." + (projector.stereoType == ProjectorDescription.ProjectorStereoType.Left ? ".LeftProjector" : ".RightProjector") + ".SliceCam(" + id + ")"; cameraObject = new GameObject(sliceName); cameraObject.AddComponent<Camera>(); cameraObject.camera.transform.parent = parent.transform; //cameraObject.AddComponent<CameraLines>(); //use this for easy way of getting lines // Set up render path cameraObject.camera.depthTextureMode = DepthTextureMode.Depth; cameraObject.camera.renderingPath = RenderingPath.Forward; // We will manually call .render on these cameras cameraObject.camera.enabled = false; this.CopyFrom(copyFrom); }
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(); }
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); } } }
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); } }
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; }