Example #1
0
        private void ProjectToZBuffer(ZBufferItem[] zBuffer, IRayFactory rayFactory)
        {
            foreach (var o in Objects)
            {
                for (int i = 0; i < o.Mesh.Triangles.Length; ++i)
                {
                    var t  = o.Mesh.Triangles[i];
                    var v1 = o.Mesh.Vertices[t.V1];
                    var v2 = o.Mesh.Vertices[t.V2];
                    var v3 = o.Mesh.Vertices[t.V3];
                    var n  = o.Mesh.Normals[i];

                    rayFactory.ProjectToZBuffer(v1, v2, v3, n, zBuffer, o);
                }
            }
        }
        public string RenderScene(int[] colors, int width, int height, bool parallel = true, CancellationToken?cancellationToken = null)
        {
            if (ZBuffer == null)
            {
                ZBuffer = new ZBufferItem[width * height];
            }
            if (rayFactory == null)
            {
                rayFactory = Camera.GetRayFactory(width, height);
            }
            var watch = Stopwatch.StartNew();

            Scene.Render(rayFactory, width, height, colors, ZBuffer);
            watch.Stop();
            var tCount = Sphere.Mesh.Triangles.Length + Cube.Mesh.Triangles.Length;
            var t      = (int)(tCount / (float)watch.ElapsedMilliseconds);
            var fps    = 1000 / watch.ElapsedMilliseconds;
            var debug  = "Rendered in " + watch.ElapsedMilliseconds + " ms Polycount: " + tCount + "; Speed: " + t + " t/ms; FPS: " + fps;

            Debug.WriteLine(debug);
            return(debug);
        }
Example #3
0
 public void Render(IRayFactory rayFactory, int width, int height, int[] frameBuffer, ZBufferItem[] zBuffer)
 {
     ClearZBuffer(zBuffer);
     ProjectToZBuffer(zBuffer, rayFactory);
     WriteToFrameBuffer(frameBuffer, zBuffer);
 }