Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        protected override void Exit()
        {
            WFB?.Dispose();
            WFB = null;

            Water?.Dispose();
            Water = null;
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 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);
 }