string GetLightString(LightObj lightObj) { Light l = lightObj.GetComponent <Light>(); string str = string.Format( @"light_source{{ #declare intensity = {3}; <{0}, {1}, {2}> rgb <intensity, intensity, intensity> {4} }}", l.transform.position.x, l.transform.position.y, l.transform.position.z, l.intensity, GetLightParamsString(l)); //0 1 2 : x y z //3 : light intensity //4 light type //5 light params return(str); }
void Update() { //Move if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow)) { transform.position += new Vector3(TheCamera.forward.x, 0, TheCamera.forward.z).normalized *Time.deltaTime *MoveSpeed; } else if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow)) { transform.position -= new Vector3(TheCamera.forward.x, 0, TheCamera.forward.z).normalized *Time.deltaTime *MoveSpeed; } if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) { transform.position -= new Vector3(TheCamera.right.x, 0, TheCamera.right.z).normalized *Time.deltaTime *MoveSpeed; } else if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) { transform.position += new Vector3(TheCamera.right.x, 0, TheCamera.right.z).normalized *Time.deltaTime *MoveSpeed; } //Camera Rote if (CanRot) { if (PressLeftMBToRot) { if (Input.GetMouseButton(0)) { while (CameraRot.x > 90) { CameraRot -= new Vector3(180, 0, 0); } while (CameraRot.x < -90) { CameraRot += new Vector3(180, 0, 0); } while (CameraRot.y > 180) { CameraRot -= new Vector3(0, 360, 0); } while (CameraRot.y < -180) { CameraRot += new Vector3(0, 360, 0); } TheX = CameraRot.x - Input.GetAxis("Mouse Y") * DeltaRotSpeed * Time.deltaTime; if (TheX < -89) { TheX = -89; } if (TheX > 89) { TheX = 89; } TheY = CameraRot.y - Input.GetAxis("Mouse X") * DeltaRotSpeed * -0.6f * Time.deltaTime; CameraRot = new Vector3(TheX, TheY, 0); TheCamera.eulerAngles = CameraRot; } } else { while (CameraRot.x > 90) { CameraRot -= new Vector3(180, 0, 0); } while (CameraRot.x < -90) { CameraRot += new Vector3(180, 0, 0); } while (CameraRot.y > 180) { CameraRot -= new Vector3(0, 360, 0); } while (CameraRot.y < -180) { CameraRot += new Vector3(0, 360, 0); } TheX = CameraRot.x - Input.GetAxis("Mouse Y") * DeltaRotSpeed * Time.deltaTime; if (TheX < -89) { TheX = -89; } if (TheX > 89) { TheX = 89; } TheY = CameraRot.y - Input.GetAxis("Mouse X") * DeltaRotSpeed * -0.6f * Time.deltaTime; CameraRot = new Vector3(TheX, TheY, 0); TheCamera.eulerAngles = CameraRot; } } //Cursor Visible if (Input.GetKeyUp(KeyCode.Escape)) { HideCursor = !HideCursor; Cursor.visible = !HideCursor; if (HideCursor) { Cursor.lockState = CursorLockMode.Locked; } else { Cursor.lockState = CursorLockMode.None; } } //Move Up and Down if (CanUpAndDown) { if (Input.GetKey(KeyCode.Space)) { TheCamera.position += Vector3.up * 0.1f * UpDownSpeed * Time.deltaTime; } else if (Input.GetKey(KeyCode.LeftShift)) { TheCamera.position -= Vector3.up * 0.1f * UpDownSpeed * Time.deltaTime; } } if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { TheLO = hit.transform.GetComponent <LightObj>(); if (TheLO) { TheLO.OnClick(); } } } }
/// <summary> /// Method to build shadow maps. /// </summary> public void RenderShadowMap(LightObj light, int num, Matrix projection) { Matrix lightMatrix = Matrix.LookAtRH(light.Direction, new Vector3(0, 0, 0), new Vector3(0, 1, 0)) * projection; switch (num) { case 0: shadowHelp.BeginScene(shadowMap.GetSurfaceLevel(0)); //, device.Viewport); break; case 1: shadowHelp.BeginScene(shadowMap2.GetSurfaceLevel(0), device.Viewport); break; case 2: shadowHelp.BeginScene(shadowMap3.GetSurfaceLevel(0), device.Viewport); break; } device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0); effect.Technique = "ShadowMap"; effect.SetValue("maxDepth", light.Distance * 3); effect.SetValue("lightWVP", lightMatrix); effect.Begin(FX.None); effect.BeginPass(0); if (groundPlane.Enabled) { groundPlane.Mesh.DrawSubset(0); } for (int i = 0; i < mesh.Count; i++) { if (mesh[i].Enabled) { mesh[i].Mesh.DrawSubset(0); } } effect.EndPass(); effect.End(); shadowHelp.EndScene(Filter.Point); // shadowMap = shadowTest. switch (num) { case 0: effect.SetValue("shadowMapLight1", shadowMap); break; case 1: effect.SetValue("shadowMapLight2", shadowMap2); break; case 2: effect.SetValue("shadowMapLight3", shadowMap3); break; } }