XNA入门(三)灯光和材质

来源:互联网 发布:数据库基础教程下载 编辑:程序博客网 时间:2024/04/30 09:22

光源:环境光、定向光源(例如无限远处的太阳)、点光源(灯泡)、聚光灯(手电)

   private void SetupLights()//设置定向光源        {
            device.Material = mtrl;
            device.Lights[0].Type = LightType.Directional;
            device.Lights[0].Diffuse = System.Drawing.Color.White; //灯光的颜色
            device.Lights[0].Direction = new Vector3(0, 0, 4); //设置灯光方向,和三角形法线方向相反
            //device.Lights[0].Direction = new Vector3(0, 0, -2);
            device.Lights[0].Update();     //更新灯光设置,创建第一盏灯光
            device.Lights[0].Enabled = true;    //使设置有效
            device.RenderState.Ambient = System.Drawing.Color.FromArgb(0x808080);//环境光的颜色
            //device.RenderState.Ambient = System.Drawing.Color.FromArgb(0xffffff); //环境光增强
        }

 private void SetupLights()//点光源
        {
            device.Material = mtrl;
            device.Lights[0].Type = LightType.Point;
            device.Lights[0].Diffuse = System.Drawing.Color.White;
            device.Lights[0].Range = 20.0f;
            device.Lights[0].Position = new Vector3(0, 0, -4); //设置灯光位置,注意光线的方向
            device.Lights[0].Attenuation1 = 0.2f;//衰减系数:1/(0.2d)
            device.Lights[0].Enabled = true;    //使设置有效
            device.Lights[0].Update();     //更新灯光设置,创建第一盏灯光
            device.RenderState.Ambient = System.Drawing.Color.FromArgb(0x808080);

        }

 private void SetupLights()//聚光灯
        {
            device.Material = mtrl;
            device.Lights[0].Type = LightType.Spot;
            device.Lights[0].Diffuse = System.Drawing.Color.White;
            device.Lights[0].Range = 20.0f;
            device.Lights[0].Position = new Vector3(0, 4, -6);   //设置灯光位置
            device.Lights[0].Direction = new Vector3(0, -4, 4);   //设置灯光方向
            device.Lights[0].InnerConeAngle = 0.2f;  //值较大时,例如为0.5,地板变为黄色
            device.Lights[0].OuterConeAngle = 0.5f;  //值较大时,例如为1.0,地板变为黄色
            device.Lights[0].Falloff = 1.0f;
            device.Lights[0].Attenuation0 = 1.0f;
            device.Lights[0].Enabled = true;    //使设置有效
            device.Lights[0].Update();     //更新灯光设置,创建第一盏灯光
            device.RenderState.Ambient = System.Drawing.Color.FromArgb(0x808080);

反射光:环境光(Ambient Light),漫反射(Diffuse Light)和镜面反射(Specular Light)。镜面反射需要更多计算,因此D3D默认关闭镜面反射

镜面反射:(1) 材质设置 mtrl.Specular = System.Drawing.Color.White;
                                    mtrl.SpecularSharpness = 10.0f;//反射锐度,值越小,反射光越分散

                      (2) 开启材质镜面高光功能:  device.RenderState.SpecularEnable = true;        //打开反射         

材质: Material mtrl;

   mtrl = new Material();
            mtrl.Diffuse = System.Drawing.Color.Yellow;  //物体的颜色
            mtrl.Ambient = System.Drawing.Color.Red;   //反射环境光的颜色

            mtrl.Emissive = System.Drawing.Color.LightPink;//自发光

材质颜色透明:

   mtr = new Material(); //透明正方形使用的材质
            mtr.Ambient = Color.FromArgb(127, 255, 0, 0);//注意Aphla的值为127
            mtr.Diffuse = Color.FromArgb(127, 255, 0, 0);


   device.RenderState.DiffuseMaterialSource = ColorSource.Material;
            device.RenderState.AlphaBlendEnable = true;
            device.RenderState.SourceBlend = Blend.SourceColor;
            device.RenderState.DestinationBlend = Blend.InvSourceAlpha;


原创粉丝点击