コード例 #1
0
        public bool Occlude()
        {
            bool result = default;

            for (int i = 0; i < traceQueries.Length; i++)
            {
                OccludeQuery query = occludeQueries[i];
                result ^= CurrentPair.scene.Occlude(ref query);
            }

            return(result);
        }
コード例 #2
0
        public BenchmarkBVH()
        {
            Scene scene = new Scene();

            Mesh mesh = new(@"C:\Users\MMXXXVIII\Things\CodingStuff\C#\EchoRenderer\EchoRenderer\Assets\Models\BlenderBMW\BlenderBMW.obj");

            scene.children.Add(new MeshObject(mesh, new Matte()));

            traceQueries   = new TraceQuery[65536];
            occludeQueries = new OccludeQuery[65536];

            IRandom random = new SystemRandom(42);

            const float Radius = 9f;
            const float Height = 5f;

            for (int i = 0; i < traceQueries.Length; i++)
            {
                Float2 point    = new Float2(MathF.Sqrt(random.Next1()) * Radius, random.Next1() * Height);
                Float3 position = point.X_Y.RotateXZ(random.Next1() * 360f);

                Float3 target = Float3.CreateY(0.6f) + random.NextInSphere(0.25f);

                if (random.Next1() < 0.01f)
                {
                    Float3 offset = (target - position) / 2f;

                    target    = position;
                    position += offset;
                }

                Ray ray = new Ray(position, (target - position).Normalized);

                traceQueries[i]   = ray;
                occludeQueries[i] = ray;
            }

            Pairs = new[]
            {
                new Pair(new PreparedScene(scene, new ScenePrepareProfile {
                    AggregatorProfile = new AggregatorProfile {
                        AggregatorType = typeof(BoundingVolumeHierarchy)
                    }
                }), "Regular"),
                new Pair(new PreparedScene(scene, new ScenePrepareProfile {
                    AggregatorProfile = new AggregatorProfile {
                        AggregatorType = typeof(QuadBoundingVolumeHierarchy)
                    }
                }), "Quad")
            };
        }