目前做在.net winform引用Directx 做了一个3d模型,数据是从数据库中读到的三维坐标。用的是平行光源。方向是从上往下斜着照射的。问题是模型看上去光是从中心原点发出的,而且看上去有点暗,假如把环境光调高,模型又会变的惨白。
下面的图是材质和光源的设置。另外顶点缓冲也设置了顶点法向量。
//材质设置
material = new Material();
material.Ambient = Color.FromArgb(0, 40, 40, 40);//设置环境光
material.Diffuse = Color.FromArgb(1, 250, 250, 250);//设置漫反射
material.Emissive = Color.FromArgb(0, 0, 0, 0);//设置自发光
material.Specular = Color.FromArgb(0, 200, 200, 200);//设置镜面反射光
material.SpecularSharpness = 200;//反射高光清晰度
device.Material = material;
//光源设置
//填充模式
device.RenderState.FillMode = FillMode.Solid;
//开启场景光源
device.RenderState.Lighting = true;
device.RenderState.SpecularEnable = true;
//设置光源类型,Point为点光源,Directional为平行光源,Spot为聚光灯(散射型)
device.Lights[0].Type = LightType.Directional;
下面的图是材质和光源的设置。另外顶点缓冲也设置了顶点法向量。
//材质设置
material = new Material();
material.Ambient = Color.FromArgb(0, 40, 40, 40);//设置环境光
material.Diffuse = Color.FromArgb(1, 250, 250, 250);//设置漫反射
material.Emissive = Color.FromArgb(0, 0, 0, 0);//设置自发光
material.Specular = Color.FromArgb(0, 200, 200, 200);//设置镜面反射光
material.SpecularSharpness = 200;//反射高光清晰度
device.Material = material;
//光源设置
//填充模式
device.RenderState.FillMode = FillMode.Solid;
//开启场景光源
device.RenderState.Lighting = true;
device.RenderState.SpecularEnable = true;
//设置光源类型,Point为点光源,Directional为平行光源,Spot为聚光灯(散射型)
device.Lights[0].Type = LightType.Directional;
device.Lights[0].Direction = new Vector3(1,1,-10);
device.Lights[0].Direction = new Vector3(0, 0, -10);
// //漫射光
device.Lights[0].Diffuse = Color.FromArgb(0, 250, 250, 250);
// //环境光
device.Lights[0].Ambient = Color.FromArgb(0, 40, 40, 40);
//镜面光
device.Lights[0].Specular = Color.FromArgb(0, 200, 200, 200);
// //开启
device.Lights[0].Enabled = true;
解决方案
20
device.Lights[0].Direction = new Vector3(1,1,-10);
device.Lights[0].Direction = new Vector3(0, 0, -10);
这样最后不还是水平光吗?
device.Lights[0].Direction = new Vector3(0, 0, -10);
这样最后不还是水平光吗?
20
不清楚了,本人去掉高光、环境光,显示的色彩亮度是正常的
有高光:
无高光:
有高光:
无高光: