コード例 #1
0
ファイル: Light.cs プロジェクト: polytronicgr/FlightSimulator
        private LightColor Specular(Vector3D eyePos, Vector3D pos, Vector3D normal,
                                    Material mate)
        {
            LightColor ret = new LightColor(0.0D, 0.0D, 0.0D);

            if (!type.Equals("AMBIENCE"))
            {
                Vector3D nml = normal;
                Vector3D lv  = LightDirectionVector(pos, normal);
                Vector3D ev  = EyeDirectionVector(pos, eyePos);
                double   a   = nml.DotProd(lv);
                Vector3D rv  = nml.SclProd(2.0D * a).Sub(lv);

                double cosc = rv.DotProd(ev);

                if (cosc > 0.0D)
                {
                    double k = Math.Pow(cosc, mate.specularSharpness);
                    for (int i = 0; i < 3; i++)
                    {
                        ret.SetElement(i, Strength(pos).GetElement(i) * k * mate.specular.GetElement(i));
                    }
                }
            }
            return(ret);
        }
コード例 #2
0
ファイル: Light.cs プロジェクト: polytronicgr/FlightSimulator
        private LightColor Diffuse(Vector3D pos, Vector3D normal, Material mate)
        {
            LightColor ret = new LightColor(0.0D, 0.0D, 0.0D);
            Vector3D   nml = normal.NmlVec();
            Vector3D   lv  = LightDirectionVector(pos, normal);

            double cosc = nml.DotProd(lv);

            if (cosc > 0.0D)
            {
                for (int i = 0; i < 3; i++)
                {
                    ret.SetElement(i, Strength(pos).GetElement(i) * cosc
                                   * mate.diffuse.GetElement(i));
                }
            }
            return(ret);
        }