コード例 #1
0
        public Ray Refract(Point3D hp, float eta)
        {
            var nidot = Point3D.Scalar(normal, _castedRay.dir);
            var k     = 1.0f - eta * eta * (1.0f - nidot * nidot);

            if (k >= 0)
            {
                k = (float)Math.Sqrt(k);
                return(Ray.BuildRay(hp, Point3D.Norm(eta * _castedRay.dir - (k + eta * nidot) * normal)));
            }
            else
            {
                return(null);
            }
        }
コード例 #2
0
 public Ray Reflect(Point3D hp)
 {
     return(Ray.BuildRay(hp, Point3D.Norm(_castedRay.dir - 2 * normal * Point3D.Scalar(normal, _castedRay.dir))));
 }