Exemple #1
0
        public void Draw(Scattaring fx)
        {
            Matrix[] modelTansforms = new Matrix[Fbx.Bones.Count];
            Fbx.CopyAbsoluteBoneTransformsTo(modelTansforms);

            foreach (ModelMesh mesh in Fbx.Meshes)
            {
                foreach (Effect currentEffect in mesh.Effects)
                {
                    Matrix world = modelTansforms[mesh.ParentBone.Index] * fx.WorldMatrix;
                    currentEffect.Parameters["WorldViewProj"].SetValue(world * fx.viewProjection);
                    currentEffect.Parameters["WorldInverseTranspose"].SetValue(fx.invertTransposeWorld);
                    currentEffect.Parameters["World"].SetValue(world);
                    currentEffect.Parameters["ViewInv"].SetValue(fx.invertView);

                    currentEffect.Parameters["LightDirection"].SetValue(fx.lightDirection);
                    currentEffect.Parameters["LightColor"].SetValue(fx.lightColor);
                    currentEffect.Parameters["LightColorAmbient"].SetValue(fx.lightColorAmbient);
                    currentEffect.Parameters["FogColor"].SetValue(fx.fogColor);
                    currentEffect.Parameters["fDensity"].SetValue(fx.fogDensity);
                    currentEffect.Parameters["SunLightness"].SetValue(fx.sunLightness);
                    currentEffect.Parameters["sunRadiusAttenuation"].SetValue(fx.sunRadiusAttenuation);
                    currentEffect.Parameters["largeSunLightness"].SetValue(fx.largeSunLightness);
                    currentEffect.Parameters["largeSunRadiusAttenuation"].SetValue(fx.largeSunRadiusAttenuation);
                    currentEffect.Parameters["dayToSunsetSharpness"].SetValue(fx.dayToSunsetSharpness);
                    currentEffect.Parameters["hazeTopAltitude"].SetValue(fx.hazeTopAltitude);
                }
                mesh.Draw();
            }
        }
Exemple #2
0
        public TerrainScreen()
        {
            camera = new FirstPersonCamera(new Vector3(867, 198, -1215));
            projectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, aspectRatio, 1, 10000);

            islandShader = new MultiTextured();
            {
                islandShader.ProjectionMatrix = projectionMatrix;
                islandShader.ViewMatrix = camera.View;
                islandShader.InitParameters();
            }

            mvpshader = new JustMvp();
            {
                mvpshader.ProjectionMatrix = projectionMatrix;
                mvpshader.ViewMatrix = camera.View;
                mvpshader.InitParameters();
            }

            shipShader = new BasicEffect(BaseClass.Device);
            {
                shipShader.Projection = projectionMatrix;
                shipShader.View = camera.View;
            }

            scatteringShader = new Scattaring();
            {
                scatteringShader.ProjectionMatrix = projectionMatrix;
                scatteringShader.ViewMatrix = camera.View;
                scatteringShader.InitParameters();
            }

            waterShader = new WaterShader();
            {
                waterShader.ProjectionMatrix = projectionMatrix;
                waterShader.ViewMatrix = camera.View;
                waterShader.InitParameters();
            }

            cloudShader = new CloudShader();
            {
                cloudShader.ProjectionMatrix = projectionMatrix;
                cloudShader.ViewMatrix = camera.View;
                cloudShader.InitParameters();
            }

            rainShader = new RainShader();
            {
                rainShader.ProjectionMatrix = projectionMatrix;
                rainShader.ViewMatrix = camera.View;
                rainShader.InitParameters();
            }

            rainDropsShader = new RainDropsShader();
            {
                rainDropsShader.InitParameters();
            }

            fogShader = new Pirates.Shaders.Fog();
            {
                fogShader.InitParameters();
            }

            rs = new RasterizerState();
            rs.CullMode = CullMode.None;
            //rs.FillMode = FillMode.WireFrame;

            cloudManager = new CloudManager();
            rainManager = new RainManager();

            Vector3 minBox = new Vector3(-5000f, 300f, -5000f);
            Vector3 maxBox = new Vector3(5000f, 1500f, 5000f);

            int[] allCloudSprites = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
            cloudManager.AddCloud(1000, minBox, maxBox, 0.75f, allCloudSprites);
            cloudManager.Instancer.Update();

            minBox = new Vector3(-800, 320f, -800f);
            maxBox = new Vector3(800f, 0f, 800f);
            rainManager.AddDrop(250000, minBox, maxBox);
            cloudManager.Instancer.Update();

            island = new Terrain("island4", 10, 1);

            water = new Terrain("map2", 30, 1);
            water.Translate(0, 40, 0);
            water.Update();
            reflectionPlane = CreatePlane(40, new Vector3(0, -1, 0), true);
            reflectionMatrix = Matrix.CreateReflection(reflectionPlane);

            skydome = new ObjectSkydome(scatteringShader);
            skydome.Scale(3200);
            skydome.Rotate(-90, new Vector3(1, 0, 0));
            skydome.Update();

            Wind.Direction = MathFunctions.AngleToVector(45);
            //Wind.Force = 1000000f;

            ship = new ObjectShip();
            ship.Translate(-288, 20, -486);
            ship.Update();
            ship.Physics = new ObjectPhysics(50, ship.ModelMatrix);

            if (island.IsOnHeightmap(ship.ModelMatrix.Translation))
            {
                ship.Physics.material = MaterialType.Island;
                island.ColisionWithTerrain(ship);
            }
            else
            {
                ship.Physics.material = MaterialType.Water;
                water.GetObjectPositionOnWater(ship, waterShader);
            }
        }
Exemple #3
0
        public TerrainScreen(SerializationInfo info, StreamingContext ctxt)
        {
            this.camera = (FirstPersonCamera)info.GetValue("Camera", typeof(FirstPersonCamera));
            this.aspectRatio = (float)info.GetValue("AspectRatio", typeof(float));
            this.projectionMatrix = (Matrix)info.GetValue("ProjectionMatrix", typeof(Matrix));
            this.rs = new RasterizerState();

            islandShader = new MultiTextured();
            {
                islandShader.ProjectionMatrix = projectionMatrix;
                islandShader.ViewMatrix = camera.View;

                islandShader.InitParameters();
            }

            mvpshader = new JustMvp();
            {
                mvpshader.ProjectionMatrix = projectionMatrix;
                mvpshader.ViewMatrix = camera.View;
                mvpshader.InitParameters();
            }

            scatteringShader = new Scattaring();
            {
                scatteringShader.ProjectionMatrix = projectionMatrix;
                scatteringShader.ViewMatrix = camera.View;
                scatteringShader.InitParameters();
            }

            waterShader = new WaterShader();
            {
                waterShader.ProjectionMatrix = projectionMatrix;
                waterShader.ViewMatrix = camera.View;
                waterShader.InitParameters();
            }

            rs = new RasterizerState();
            rs.CullMode = CullMode.None;
            rs.FillMode = FillMode.WireFrame;

            island = new Terrain("island4", 2, 1);
            water = new Terrain("map2", 1, 1);
            water.Translate(0, 30, 0);
            water.Update();

            DepthStencilState depthStencilState = new DepthStencilState();
            depthStencilState.DepthBufferFunction = CompareFunction.LessEqual;
            BaseClass.Device.DepthStencilState = depthStencilState;
        }
Exemple #4
0
 public ObjectSkydome(Scattaring fx)
     : base("skydome4", fx)
 {
     fx.skydomeSize = SKYDOMESIZE;
 }