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(); } }
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); } }
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; }
public ObjectSkydome(Scattaring fx) : base("skydome4", fx) { fx.skydomeSize = SKYDOMESIZE; }