不知道为什么我原本是想做成那样,但是好像出错了
就像是这样,每一个面感觉是一起变亮一起变暗,在同一个光照强度到另一个。
下面是我定义光照的代码
private void DirectLighting(Matrix4x4 m,Vector3 worldEyeposition, ref Vertex vert)
{
Vector3 worldPoint = vert.point * m;//顶点位置世界坐标
Vector3 normal = vert.normal * m.Inverse().Transpose();//
normal = normal.Normalize();//单位化
Color emissionColor = cube.mesh.Material.emissive;//自发光;
Color ambientColor = _ambientColor * cube.mesh.Material.ka;//环境光
Vector3 lightDir = _dirLight.dir;
float diffuse = Vector3.Dot(normal, lightDir);//夹角
if (diffuse<0)
{
diffuse = 0;
}
Color diffuseColor = _dirLight.color * cube.mesh.Material.diffuse * Math.Max(0, Vector3.Dot(normal, lightDir));
Vector3 viewDir = (worldEyeposition - worldPoint).Normalize();
Vector3 reflectDir = (viewDir + lightDir).Normalize();
float specular = (float)Math.Pow(Math.Max(Vector3.Dot(reflectDir, normal), 0.0), 32);
float specularStrength = 0.5f;
Color specularColor =cube.mesh.Material.specular * specular * _dirLight.color * specularStrength;
vert.lightingColor = emissionColor + ambientColor + diffuseColor+specularColor;
}
求各位博主提供解决办法。