Esempio n. 1
0
        public (bool, float, float) intersect(Vec3f rayorig, Vec3f raydir)
        {
            float t0  = 0.0f;
            float t1  = 0.0f;
            Vec3f l   = center - rayorig;
            float tca = l.dot(raydir);

            if (tca < 0)
            {
                return(false, t0, t1);
            }
            float d2 = l.dot(l) - tca * tca;

            if (d2 > radius2)
            {
                return(false, t0, t1);
            }
            float thc = (float)Math.Sqrt(radius2 - d2);

            t0 = tca - thc;
            t1 = tca + thc;

            return(true, t0, t1);
        }
Esempio n. 2
0
        public static Mat4f lookAtLH(Vec3f eye, Vec3f center, Vec3f up)
        {
            Vec3f f = (center - eye).normal();
            Vec3f s = (f * up).normal();
            Vec3f u = s * f;

            Mat4f Result = new Mat4f();

            Result.data[0][0] = s.x;
            Result.data[1][0] = s.y;
            Result.data[2][0] = s.z;
            Result.data[0][1] = u.x;
            Result.data[1][1] = u.y;
            Result.data[2][1] = u.z;
            Result.data[0][2] = f.x;
            Result.data[1][2] = f.y;
            Result.data[2][2] = f.z;
            Result.data[3][0] = -(s.dot(eye));
            Result.data[3][1] = -(u.dot(eye));
            Result.data[3][2] = -(f.dot(eye));
            return(Result);
        }