光源:环境光、定向光源(例如无限远处的太阳)、点光源(灯泡)、聚光灯(手电)
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;
本文详细介绍了Direct3D中的灯光类型(环境光、定向光源、点光源、聚光灯)设置方法及材质(颜色、透明度、反射光)的配置技巧,通过实例演示了如何在场景中应用这些元素以实现更丰富的视觉效果。

被折叠的 条评论
为什么被折叠?



