public static void ResetMaterial() { GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Ambient, new float[] { 0.2f, 0.2f, 0.2f, 1.0f }); GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Diffuse, new float[] { 0.8f, 0.8f, 0.8f, 1.0f }); GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Specular, new float[] { 0f, 0f, 0f, 1.0f }); GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Emission, new float[] { 0f, 0f, 0f, 1.0f }); GL.Material(MaterialFace.FrontAndBack, MaterialParameter.Shininess, 0f); ShaderProgram.Stop(); }
public void RenderWater() { float z = Client.Network.CurrentSim.WaterHeight; GL.Color4(0.09f, 0.28f, 0.63f, 0.84f); if (RenderSettings.WaterReflections) { waterProgram.Start(); // Reflection texture unit GL.ActiveTexture(TextureUnit.Texture0); GL.Enable(EnableCap.Texture2D); GL.BindTexture(TextureTarget.Texture2D, reflectionTexture); GL.Uniform1(waterProgram.Uni("reflection"), 0); // Refraction texture unit GL.ActiveTexture(TextureUnit.Texture1); GL.Enable(EnableCap.Texture2D); GL.BindTexture(TextureTarget.Texture2D, refractionTexture); GL.Uniform1(waterProgram.Uni("refraction"), 1); // Normal map GL.ActiveTexture(TextureUnit.Texture2); GL.Enable(EnableCap.Texture2D); GL.BindTexture(TextureTarget.Texture2D, normalmap); GL.Uniform1(waterProgram.Uni("normalMap"), 2); //// DUDV map GL.ActiveTexture(TextureUnit.Texture3); GL.Enable(EnableCap.Texture2D); GL.BindTexture(TextureTarget.Texture2D, dudvmap); GL.Uniform1(waterProgram.Uni("dudvMap"), 3); //// Depth map GL.ActiveTexture(TextureUnit.Texture4); GL.Enable(EnableCap.Texture2D); GL.BindTexture(TextureTarget.Texture2D, depthTexture); GL.Uniform1(waterProgram.Uni("depthMap"), 4); int lightPos = GL.GetUniformLocation(waterProgram.ID, "lightPos"); GL.Uniform4(lightPos, 0f, 0f, z + 100, 1f); // For now sun reflection in the water comes from the south west sim corner int cameraPos = GL.GetUniformLocation(waterProgram.ID, "cameraPos"); GL.Uniform4(cameraPos, Camera.RenderPosition.X, Camera.RenderPosition.Y, Camera.RenderPosition.Z, 1f); int waterColor = GL.GetUniformLocation(waterProgram.ID, "waterColor"); GL.Uniform4(waterColor, 0.09f, 0.28f, 0.63f, 0.84f); } GL.Begin(BeginMode.Quads); for (float x = -256f * 2; x <= 256 * 2; x += 256f) { for (float y = -256f * 2; y <= 256 * 2; y += 256f) { DrawWaterQuad(x, y, z); } } GL.End(); if (RenderSettings.WaterReflections) { GL.ActiveTexture(TextureUnit.Texture4); GL.Disable(EnableCap.Texture2D); GL.ActiveTexture(TextureUnit.Texture3); GL.Disable(EnableCap.Texture2D); GL.ActiveTexture(TextureUnit.Texture2); GL.Disable(EnableCap.Texture2D); GL.ActiveTexture(TextureUnit.Texture1); GL.Disable(EnableCap.Texture2D); GL.ActiveTexture(TextureUnit.Texture0); GL.Disable(EnableCap.Texture2D); ShaderProgram.Stop(); } }