Exemplo n.º 1
0
        public void VectorIndexer()
        {
            float x = 10f, y = 11f, z = 12f, h = 13f;

            var v4 = new Vec4f();

            v4 [0] = x;
            v4 [1] = y;
            v4 [2] = z;
            v4 [3] = h;

            Assert.AreEqual(x, v4 [0]);
            Assert.AreEqual(y, v4 [1]);
            Assert.AreEqual(z, v4 [2]);
            Assert.AreEqual(h, v4 [3]);

            v4   = new Vec4f();
            v4.x = x;
            v4.y = y;
            v4.z = z;
            v4.h = h;

            Assert.AreEqual(x, v4.x);
            Assert.AreEqual(y, v4.y);
            Assert.AreEqual(z, v4.z);
            Assert.AreEqual(h, v4.h);
        }
Exemplo n.º 2
0
 public static Vec4f Mult(Matrix4 m, Vec4f v)
 {
     return(new Vec4f {
         x = m.R0C0 * v.x + m.R0C1 * v.y + m.R0C2 * v.z + m.R0C3 * v.h,
         y = m.R1C0 * v.x + m.R1C1 * v.y + m.R1C2 * v.z + m.R1C3 * v.h,
         z = m.R2C0 * v.x + m.R2C1 * v.y + m.R2C2 * v.z + m.R2C3 * v.h,
         h = m.R3C0 * v.x + m.R3C1 * v.y + m.R3C2 * v.z + m.R3C3 * v.h
     });
 }
Exemplo n.º 3
0
        public void Vector4_Norm()
        {
            var b4 = new Vec4f {
                x = 1, y = 2, z = 3, h = 4
            };
            var len = b4.Norm();

            Assert.True(Math.Abs(Math.Sqrt(30) - len) <= 0.001);
        }
Exemplo n.º 4
0
        public void Project3D()
        {
            var v4 = new Vec4f {
                x = 10, y = 11, z = 12, h = 13
            };
            var v3 = Geometry.Project3D(v4);

            Assert.AreEqual(v4.x, v3.x);
            Assert.AreEqual(v4.y, v3.y);
            Assert.AreEqual(v4.z, v3.z);
        }
Exemplo n.º 5
0
        public void Vector4_Divide()
        {
            var v4 = new Vec4f {
                x = 10, y = 20, z = 30, h = 40
            };
            var r4 = v4 / 10;

            Assert.AreEqual(1, r4.x);
            Assert.AreEqual(2, r4.y);
            Assert.AreEqual(3, r4.z);
            Assert.AreEqual(4, r4.h);
        }
Exemplo n.º 6
0
        public void Vector4_Normalize()
        {
            var b4 = new Vec4f {
                x = 1, y = 2, z = 3, h = 4
            };
            var len = b4.Norm();
            var n   = b4.Normalize();

            Assert.True(Math.Abs(n.x - 1f / len) <= 0.001);
            Assert.True(Math.Abs(n.y - 2f / len) <= 0.001);
            Assert.True(Math.Abs(n.z - 3f / len) <= 0.001);
            Assert.True(Math.Abs(n.h - 4f / len) <= 0.001);
        }
Exemplo n.º 7
0
        public void Vector4_Sub()
        {
            var a4 = new Vec4f {
                x = 10, y = 20, z = 30, h = 40
            };
            var b4 = new Vec4f {
                x = 1, y = 2, z = 3, h = 4
            };

            var r = a4 - b4;

            Assert.AreEqual(9, r.x);
            Assert.AreEqual(18, r.y);
            Assert.AreEqual(27, r.z);
            Assert.AreEqual(36, r.h);
        }
Exemplo n.º 8
0
        static RenderResult Render(Model model, IShader shader)
        {
            var image         = new Image(width, height, Format.BGR);
            var zbuffer       = InitZBuffer(image);
            var screen_coords = new Vec4f [3];

            foreach (var face in model.Faces)
            {
                for (int i = 0; i < 3; i++)
                {
                    screen_coords [i] = shader.Vertex(face, i);
                }
                Triangle(image, screen_coords, shader, zbuffer);
            }

            return(new RenderResult {
                Image = image,
                ZBuffer = zbuffer
            });
        }
Exemplo n.º 9
0
 public static Vec3f Project3D(Vec4f v)
 {
     return(new Vec3f {
         x = v.x, y = v.y, z = v.z
     });
 }
Exemplo n.º 10
0
 public static Vec2f Project2D(Vec4f v)
 {
     return(new Vec2f {
         x = v.x, y = v.y
     });
 }
Exemplo n.º 11
0
        static void AmbientListing()
        {
            var rnd           = new Random();
            var screen_coords = new Vec4f [3];

            var frame        = new Image(width, height, Format.BGR);
            var shadowbuffer = InitZBuffer(frame);
            var zbuffer      = InitZBuffer(frame);

            var total = new Image(1024, 1024, Format.BGR);
            var occl  = new Image(1024, 1024, Format.BGR);

            const int nrenders = 1;

            for (int iter = 1; iter <= nrenders; iter++)
            {
                for (int i = 0; i < shadowbuffer.Length; i++)
                {
                    shadowbuffer [i] = 0;
                    zbuffer [i]      = 0;
                }

                var vUp = new Vec3f {
                    x = (float)rnd.NextDouble(),
                    y = (float)rnd.NextDouble(),
                    z = (float)rnd.NextDouble()
                };
                var spLocation = RandPointOnUnitSphere();
                spLocation.y = Math.Abs(spLocation.y);

                frame.Clear();
                var mvM     = LookAt(spLocation, center, vUp);
                var pM      = Projection(0);
                var zshader = new ZShader(diabloModel, viewPort, pM, mvM);
                foreach (var face in diabloModel.Faces)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        screen_coords [i] = zshader.Vertex(face, i);
                    }
                    Triangle(frame, screen_coords, zshader, shadowbuffer);
                }
                //frame.VerticalFlip ();
                //frame.WriteToFile ("framebuffer.tga");

                occl.Clear();
                var shader = new OcclusionShader(diabloModel, viewPort, pM, mvM, occl, shadowbuffer, frame.Width);
                foreach (var face in diabloModel.Faces)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        screen_coords [i] = shader.Vertex(face, i);
                    }
                    Triangle(frame, screen_coords, shader, zbuffer);
                }

                for (int i = 0; i < total.Width; i++)
                {
                    for (int j = 0; j < total.Height; j++)
                    {
                        float prev = total [i, j] [0];
                        float curr = occl [i, j] [0];
                        var   val  = (byte)((prev * (iter - 1) + curr) / iter + 0.5f);
                        total [i, j] = new Color(val, val, val);
                    }
                }
            }

            total.VerticalFlip();
            total.WriteToFile("total-occlusion.tga");
        }