void Start() { meshFilter = GetComponent <MeshFilter>(); meshRenderer = GetComponent <MeshRenderer>(); if (meshFilter == null) { meshFilter = gameObject.AddComponent <MeshFilter>(); } if (meshRenderer == null) { meshRenderer = gameObject.AddComponent <MeshRenderer>(); } meshFilter.sharedMesh = CreateWaterMesh(); meshRenderer.sharedMaterial = waterMaterial; vertecies = waterMesh.vertices; waveEquationCom = new WaveEquationComponent(); waveEquationCom.InitWavePargms(waveSpeed, viscosity, 1.0f / (float)(heightMapSize), deltaTime); if (!CheckSupport()) { //return; } CreateWaterCameraGO(); }
//width,height,depth:正交摄像机宽高深度, texSize:照相机targetTexture纹理大小 waveEquationComponent:波动方程组件 public void InitWaterCameraCom(float width, float height, float depth, int texSize, WaveEquationComponent waveEquationComponent) { this.waveEquationCom = waveEquationComponent; this.waveEquationCom.InitWaveEquMat(texSize, waveMat); waterCamera = gameObject.AddComponent <Camera>(); waterCamera.aspect = width / height; waterCamera.backgroundColor = Color.black; waterCamera.cullingMask = 0; waterCamera.depth = 0; waterCamera.farClipPlane = depth; waterCamera.nearClipPlane = 0; waterCamera.orthographic = true; waterCamera.orthographicSize = height * 0.5f; waterCamera.clearFlags = CameraClearFlags.Depth; waterCamera.allowHDR = false; commandBuffer = new CommandBuffer(); waterCamera.AddCommandBuffer(CameraEvent.AfterImageEffectsOpaque, commandBuffer); RenderTexture orgRT = RenderTexture.active; curTexture = RenderTexture.GetTemporary(texSize, texSize, 16); curTexture.name = "[CurrentTexture]"; RenderTexture.active = curTexture;//这里需要设置RenderTexture.active好让GL.Clear()生效 GL.Clear(false, true, new Color(0, 0, 0, 0)); heightMap = RenderTexture.GetTemporary(texSize, texSize, 16); heightMap.name = "[WaterHeightMap]"; RenderTexture.active = heightMap; GL.Clear(false, true, new Color(0, 0, 0, 0)); normalMap = RenderTexture.GetTemporary(texSize, texSize, 16); normalMap.name = "[WaterNormalMap]"; RenderTexture.active = orgRT; waterCamera.targetTexture = curTexture; }