Beispiel #1
0
 protected override void initEffect(ContentManager ctx)
 {
     if (effect == null)
     {
         effect = new PhongShader(ctx);
     }
 }
Beispiel #2
0
        public void SetShader(ShaderList shaderList)
        {
            if (shaderList == ShaderList.Lamp)
            {
                shader  = new LampShader();
                isLight = true;
            }

            if (shaderList == ShaderList.Phong)
            {
                shader  = new PhongShader();
                isLight = false;
            }
        }
Beispiel #3
0
		/// <summary>
		/// Gets a string representing a value.
		/// </summary>
		/// <param name="Value">Value</param>
		/// <returns>Expression string.</returns>
		public string GetString(object Value)
		{
			PhongShader Shader = (PhongShader)Value;
			StringBuilder sb = new StringBuilder();

			sb.Append("PhongShader(");
			sb.Append(Expression.ToString(Shader.Material));
			sb.Append(',');
			sb.Append(Expression.ToString(Shader.Ambient));
			sb.Append(",");
			sb.Append(Expression.ToString(Shader.Sources));
			sb.Append(')');

			return sb.ToString();
		}
Beispiel #4
0
        public static void AddLighting(PhongShader effect)
        {
            var currentIndex = 0;

            var colors = new[]
            {
                new Vector3(1.0f, 0, 0),
                new Vector3(1.0f, 0.25f, 0),
                new Vector3(1, 0.5f, 0),
                new Vector3(1, 0.75f, 0),
                new Vector3(1, 1, 0),
                new Vector3(1, 0.75f, 0),
                new Vector3(1, 0.5f, 0),
                new Vector3(1, 0.25f, 0),
            };

            // set up lights
            effect.LightPosition = new[] { DirectLightDirection, PointLightPosition };
            effect.La            = new[] { DirectLightLa, PointLightLa };
            effect.Ld            = new[] { DirectLightLd, PointLightLd };
            effect.Ls            = new[] { DirectLightLs, PointLightLs };

            var t = new Timer()
            {
                Interval  = COLOR_INTERVAL,
                AutoReset = true,
            };

            t.Elapsed += (o, e) =>
            {
                currentIndex++;
                currentIndex %= colors.Length;
                effect.Ld     = new[] { DirectLightLd, colors[currentIndex] };
            };

            t.Start();

            effect.IsDirect = new[] { 1.0f, 0.0f };
        }
Beispiel #5
0
        private void DrawThreePlanes(Canvas3D Canvas)
        {
            PhongShader Shader = new PhongShader(
                new PhongMaterial(1, 2, 0, 10),
                new PhongIntensity(64, 64, 64, 255),
                new PhongLightSource(
                    new PhongIntensity(255, 0, 0, 255),
                    new PhongIntensity(255, 255, 255, 255),
                    new Vector3(200, 200, 100)));

            //new Vector3(400, 400, 50)));

            Canvas.Polygon(new Vector4[]
            {
                new Vector4(-200, 200, 300, 1),
                new Vector4(200, 200, 300, 1),
                new Vector4(200, -200, 300, 1),
                new Vector4(-200, -200, 300, 1)
            }, Shader);

            Canvas.Polygon(new Vector4[]
            {
                new Vector4(-200, 200, 100, 1),
                new Vector4(-200, 200, 300, 1),
                new Vector4(-200, -200, 300, 1),
                new Vector4(-200, -200, 100, 1)
            }, Shader);

            Canvas.Polygon(new Vector4[]
            {
                new Vector4(-200, -200, 300, 1),
                new Vector4(200, -200, 300, 1),
                new Vector4(200, -200, 100, 1),
                new Vector4(-200, -200, 100, 1)
            }, Shader);
        }
Beispiel #6
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            inputManager = new InputManager(this, camera);

            phongShader = new PhongShader(FileManager.getMediaFile("phongVS.glsl"), FileManager.getMediaFile("phongFS.glsl"));
            postProcessShader = new PostProcessShader(FileManager.getMediaFile("postProcessVS.glsl"), FileManager.getMediaFile("postProcessFS.glsl"));
            volumetricLightingShader = new VolumetricLightingShader(FileManager.getMediaFile("volumetricLightingVS.glsl"), FileManager.getMediaFile("volumetricLightingFS.glsl"));
            blurShader = new PostProcessShader(FileManager.getMediaFile("gaussianBlurVS.glsl"), FileManager.getMediaFile("gaussianBlurFS.glsl"));
            blurShader2 = new PostProcessShader(FileManager.getMediaFile("gaussianBlurVS.glsl"), FileManager.getMediaFile("gaussianBlurFS.glsl"));
            shadowMapShader = new DepthMapShader(FileManager.getMediaFile("depthMapVS.glsl"), FileManager.getMediaFile("depthMapFS.glsl"));
            depthMapShader = new DepthMapShader(FileManager.getMediaFile("depthMapVS.glsl"), FileManager.getMediaFile("depthMapFS.glsl"), screenWidth, screenHeight);
            shadowMappingShader = new ShadowMappingShader(FileManager.getMediaFile("shadowMappingVS.glsl"), FileManager.getMediaFile("shadowMappingFS.glsl"));
            blackShader = new PhongShader(FileManager.getMediaFile("blackVS.glsl"), FileManager.getMediaFile("blackFS.glsl"));
            whiteShader = new PhongShader(FileManager.getMediaFile("whiteVS.glsl"), FileManager.getMediaFile("whiteFS.glsl"));

            // Load Models
            sun.loadModelFromFile("sun.3ds");
            sun.position = new Vector3(20f, 30f, -70f);
            sun.scale = new Vector3(2f);
            sun.update();

            monkey.loadModelFromFile("monkey.3ds");
            monkey.position = new Vector3(20f, 4f, 2f);
            monkey.update();
            monkey.diffuse = new Vector3(0.1f, 0.1f, 0.8f);
            monkey.ambient = new Vector3(0.05f, 0.05f, 0.4f);

            magicBox.loadModelFromFile("magicBox.3ds");
            magicBox.position = new Vector3(20f, 6f, 0f);
            magicBox.scale = new Vector3(5f);
            magicBox.update();
            magicBox.diffuse = new Vector3(0.2f, 0.2f, 0f);
            magicBox.ambient = new Vector3(0.1f, 0.1f, 0f);
            // No Specular for the magicBox
            magicBox.specular = new Vector3(0f);
            magicBox.shininess = 1f;

            //Load floor
            floor.loadModelFromFile("floor.3ds");
            floor.position = new Vector3(0f, 0f, -10f);
            // Scale the Floor (and the texCoords)
            floor.scale = new Vector3(1000f, 1f, 1000f);
            //floor.scale = new Vector3(0.05f, 0.05f, 0.05f);
               // floor.rotation = new Vector3(45, 0, 0);
             for (int i = 0; i < floor.mesh.textureCoordinates.Count; i++)
              floor.mesh.textureCoordinates[i] *= 200f;
             floor.mesh.updateTextureCoordinates();
            floor.update();
            // No Specular for floor
            floor.specular = new Vector3(0f);
            floor.shininess = 1f;

            //Load trees
            Random random = new Random();
            for (int x = 0; x < 2; x++)
            {
                for (int z = 0; z < 10; z++)
                {
                    WorldObject tree = new WorldObject();
                    tree.loadModelFromFile("tree.3ds");
                    tree.position = new Vector3((x * 10f) - 5f, 0f, -z * 6f);
                    tree.scale = new Vector3(2f);
                    tree.rotation = new Vector3(0f, (float)(random.NextDouble() * Math.PI * 2.0), 0f);
                    tree.update();
                    tree.diffuse = new Vector3(0.6f, 0.3f, 0f);
                    tree.ambient = new Vector3(0.3f, 0.15f, 0f);
                    trees.Add(tree);
                }
            }

            // Move initial Position of the Camera away from origin
            camera.Position += new Vector3(10f, 10f, 10f);

            // Hide Mouse Cursor
            CursorVisible = false;
        }