예제 #1
0
파일: Camera.cs 프로젝트: Stoorx/RayTracer
 public Ray CastRay(Vector2 pixel)
 {
     return(new Ray(
                Origin,
                Vector3.Normalize(
                    Vector3.Transform(
                        new Vector3(pixel.X * ViewAngle.X, pixel.Y * ViewAngle.Y, ViewAngle.Z),
                        Direction
                        )
                    ),
                SpectralColor.One()
                ));
 }
예제 #2
0
파일: Program.cs 프로젝트: Stoorx/RayTracer
        static void Main(string[] args)
        {
            var camera = new Camera(new Vector3(0f, 0f, -1f), Quaternion.Identity, new Vector3(1f, 1f, 1f));
            var lights = new LightSource(
                new Vector3(1f, 1f, -1f),
                Quaternion.Identity,
                new List <Triangle>()
            {
                new Triangle(new Vector3(-0.5f, 0.5f, 0f), new Vector3(0.5f, 0.5f, 0f),
                             new Vector3(-0.5f, -0.5f, 0f)),
                new Triangle(new Vector3(0.5f, 0.5f, 0f), new Vector3(0.5f, -0.5f, 0f),
                             new Vector3(-0.5f, -0.5f, 0f))
            },
                100f,
                new SpectralColor(new float[40].Select((f, i) => (float)i * 10).ToArray()).Normalize());
            var objects = new MaterialObject(
                new Vector3(0f, 0f, 0f),
                Quaternion.CreateFromYawPitchRoll(0.5f, 0.5f, 0f),
                new List <Triangle>()
            {
                new Triangle(new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 0, 0)),
                new Triangle(new Vector3(1, 1, 0), new Vector3(0, 1, 0), new Vector3(1, 0, 0)),

                // new Triangle(new Vector3(0, 0, 0), new Vector3(0, 0, 1), new Vector3(1, 0, 0)),
                // new Triangle(new Vector3(1, 1, 0), new Vector3(0, 0, 1), new Vector3(1, 0, 0))
            },
                SpectralColor.One()
                );
            var scene = new Scene(new List <MaterialObject>()
            {
                objects
            }, new List <LightSource>()
            {
                lights
            });

            var renderer = new Renderer(scene, camera);
            var image    = renderer.Render(1366, 768, 4);
            var imgStr   = HDRPrinter.StringifyImage(image);

            File.WriteAllText("C:\\img.txt", imgStr);
        }