private void CreateWater(Terrain terrain) { WFB = new WaterFrameBuffers(); var water_terrain = Terrain.GenerateFlat(1000.0f, 25u, 1000u); var terrain_heightmap = Texture2D.Yield("$terrain/heightmap", terrain.ToBitmap(500u)); Water = GameObject.CreateUnlinked("Water"); Water.mesh = new Mesh(); Water.mesh.shape = water_terrain.Shape.Use(VertexAttribute.POSITION | VertexAttribute.NORMAL | VertexAttribute.UV); Water.material = new Material(Shader.Find("water")); Water.material.Set("water_color", Color.FromBytes(66, 135, 245)); Water.material.Set("water_color_factor", 0.75f); Water.material.Set("water_edge_clearness", 25.0f); Water.material.Set("water_edge_blend", 2.5f); Water.material.Set("wave_strength", 0.04f); Water.material.Set("wave_speed", 0.03f); Water.material.Set("wave_timestamp", 0.0f); Water.material.Set("reflectiveness", 2.5f); Water.material.Set("dampening", 10.0f); Water.material.Set("reflectivity", 0.5f); Water.material.Set("reflection", WFB.ReflectionFBO.TextureAttachment); Water.material.Set("refraction", WFB.RefractionFBO.TextureAttachment); Water.material.Set("dudv", Texture2D.FindPNG("Maps/water_dudv")); Water.material.Set("lighting_map", Texture2D.FindPNG("Maps/water_normal_map")); Water.material.Set("terrain_length", terrain.Length); Water.material.Set("terrain_max_height", terrain.MaxHeight); Water.material.Set("terrain_min_height", terrain.MinHeight); Water.material.Set("terrain_heightmap", terrain_heightmap); Water.material.Blend = true; Water.material.MarkDynamic(); }
protected override void Exit() { WFB?.Dispose(); WFB = null; Water?.Dispose(); Water = null; }
private void OnCreated_GlControl(object sender, GlControlEventArgs e) { GlControl glControl = (GlControl)sender; this.displayManager.CreateDisplay(glControl); bool result = WrapSOIL.Initialize(); if (result == false) { MessageBox.Show("SOIL: Failed initialize : " + WrapSOIL.GetSoilLastError()); return; } this.loader = new Loader(); //Camera this.camera = new Camera(new Vertex3f(0, 10, 0), 20f); //Light - Sun this.lgihtList = new List <Light>(); this.sun = new DirectionalLight(new Vertex3f(-0.5f, -1.5f, 0.5f), new Vertex3f(150, 250, -150), new Vertex3f(0.4f, 0.4f, 0.4f), new Vertex3f(1, 0, 0)); this.lgihtList.Add(sun); //Renderer this.renderer = new MasterRenderer(this.camera, this.loader, this.sun, glControl.ClientSize.Width, glControl.ClientSize.Height); this.guiRenderer = new GUIRenderer(this.loader); this.inputManager.OnEventMouseWheel += this.camera.OnEventWheel; //Water this.waterTileList = new List <WaterTile>(); this.waterTileList.Add(new WaterTile(75, -75, WATER_HEIGHT)); //Water this.waterFrameBuffers = new WaterFrameBuffers(); this.waterShader = new WaterShader(); this.waterRenderer = new WaterRenderer(loader, waterShader, this.renderer.ProjectionMatrix, this.waterFrameBuffers); //Load Resources this.entities = new List <Entity>(); this.terrain = LoadTerrain(this.loader); LoadEntities(this.terrain, this.entities, this.loader); LoadPlayer(this.loader, this.entities); //Light - Point this.lgihtList.Add(new Light(GetHeightPosition(this.terrain, 185, 12.7f, -293), new Vertex3f(2, 0, 0), new Vertex3f(1, 0.01f, 0.002f))); this.lgihtList.Add(new Light(GetHeightPosition(this.terrain, 370, 12.7f, -300), new Vertex3f(0, 2, 2), new Vertex3f(1, 0.01f, 0.002f))); this.lgihtList.Add(new Light(GetHeightPosition(this.terrain, 293, 12.7f, -305), new Vertex3f(2, 2, 0), new Vertex3f(1, 0.01f, 0.002f))); //LoadGUI(this.loader); //LoadGUI_Texture(this.loader, this.waterFrameBuffers.RefractionTexture); LoadGUI_Texture(this.loader, renderer.DepthMap); //MousePicker this.mousePicker = new MousePicker(this.camera, this.renderer.ProjectionMatrix, this.terrain); }
public WaterRenderer(Loader loader, WaterShader shader, Matrix4x4f projectionMatrix, WaterFrameBuffers fbos) { this.shader = shader; this.fbos = fbos; this.dudvTexture = loader.LoadRepeatTexture(DUDV_MAP_NAME); this.normalMap = loader.LoadRepeatTexture(NORMAL_MAP_NAME); this.shader.Start(); this.shader.ConnectTextureUnits(); this.shader.LoadProjectionMatrix(projectionMatrix); this.shader.Stop(); SetUpVAO(loader); }