예제 #1
0
        private Vector calculateReflectedVec(Vector light, Vector normal)
        {
            float up       = VectorOperations.ScalarMultiplication(light, normal);
            float bottom   = VectorOperations.ScalarMultiplication(normal, normal);
            float division = up / bottom;

            Vector right        = new Vector(2 * division * normal.X, 2 * division * normal.Y, 2 * division * normal.Z);
            Vector reflectedVec = VectorOperations.Diff(light, right);

            return(reflectedVec);
        }
예제 #2
0
        private Vector calculateLight(Vector colorVecM, Vector colorVecL, Vector vecLight, Vector vecNormal, Vector vecReflected, Vector vecViewer, float shining)
        {
            float r = colorVecM.X * colorVecL.X + VectorOperations.ScalarMultiplication(vecLight, vecNormal) + (float)Math.Pow((VectorOperations.ScalarMultiplication(vecReflected, vecViewer)), shining);
            float g = colorVecM.Y * colorVecL.Y + VectorOperations.ScalarMultiplication(vecLight, vecNormal) + (float)Math.Pow((VectorOperations.ScalarMultiplication(vecReflected, vecViewer)), shining);
            float b = colorVecM.Z * colorVecL.Z + VectorOperations.ScalarMultiplication(vecLight, vecNormal) + (float)Math.Pow((VectorOperations.ScalarMultiplication(vecReflected, vecViewer)), shining);

            r = (r > 1) ? 1.0f : r;
            g = (g > 1) ? 1.0f : g;
            b = (b > 1) ? 1.0f : b;

            return(new Vector(r, g, b));
        }