コード例 #1
0
        public static void RenderTo(this Image <Rgba32> image, IViewportToWindowTransform v2w, float viewDistance,
                                    Matrix4x4 viewing, Vector3 eye,
                                    IEnumerable <Traceable> objects, IEnumerable <Light> lights, Color ambientLight)
        {
            var sw = new System.Diagnostics.Stopwatch();

            sw.Start();

            Parallel.For(0, image.Height, (y, state) =>
            {
                Ray ray;
                Vector3 viewingPoint;
                Vector3 worldPoint;
                Color color;
                PointF viewportPoint;
                PointF windowPoint = new PointF(0, 0);

                for (var x = 0; x < image.Width; x++)
                {
                    viewportPoint = new PointF(x, y);
                    windowPoint   = v2w.Transform(viewportPoint);
                    viewingPoint  = new Vector3(windowPoint.X, windowPoint.Y, viewDistance);
                    worldPoint    = viewing.Image(viewingPoint);
                    ray           = Ray.CreateFromPoints(eye, worldPoint);
                    color         = ray.Trace(objects, lights, eye, ambientLight);
                    image[x, y]   = new Rgba32(color.R, color.G, color.B);
                }
            });

            Console.WriteLine("Elapsed: " + sw.Elapsed);
        }
コード例 #2
0
        public Ray GetLocalRay(Ray ray)
        {
            var worldOrigin = ray.Origin;
            var worldPoint  = ray.PointAt(1);
            var localOrigin = Model.Inverse.Image(worldOrigin);
            var localPoint  = Model.Inverse.Image(worldPoint);

            return(Ray.CreateFromPoints(localOrigin, localPoint));
        }