コード例 #1
0
ファイル: SolidObject.cs プロジェクト: HungryBear/rayden
 public SolidObject(BaseMaterial material, TriangleMeshInfo mesh) : base(mesh)
 {
     if (mesh == null)
     {
         throw new ArgumentNullException("mesh");
     }
     this.Material = (SolidMaterial)material;            
 }
コード例 #2
0
ファイル: BaseSceneObject.cs プロジェクト: HungryBear/rayden
 protected BaseSceneObject(TriangleMeshInfo mesh)
 {
     indexes = new HashSet<uint>();
     this.Mesh = mesh;
     if (mesh != null)
     {
         for (var i = (uint) mesh.StartTriangle; i < mesh.EndTriangle; i++)
         {
             indexes.Add(i);
         }
     }
 }
コード例 #3
0
        public TriangleMeshLight(LightMaterial mt, RayEngineScene scene, TriangleMeshInfo mesh) : base(mt)
        {
            this.scene = scene;
            this.mesh = mesh;
            this.rnd = new FastRandom();

            triangleSampleData = new TriangleSample[this.mesh.TrianglesCount];

            for (int i = mesh.StartTriangle, j = 0; i < mesh.EndTriangle; i++, j++)
            {
                triangleSampleData[j] = new TriangleSample(scene.Triangles[i].AreaV(scene.Vertices), NormalModifier * scene.Triangles[i].ComputeNormal(scene.Vertices));
            }

            triangleSampleData.PartialSort((a, b) => a.Item1.CompareTo(a.Item1), 0, triangleSampleData.Length);

        }
コード例 #4
0
ファイル: BvhDataAdapter.cs プロジェクト: HungryBear/rayden
        public GpuSmitsBVHNode[] BuildData(TriangleMeshInfo mi)
        {
            var nrm = mi.StartVertice == 0 ? -1 : mi.StartVertice - 1;
            var triData = new DLLx.TriangleData(
                scene.Triangles.ToList().GetRange(mi.StartTriangle, mi.EndTriangle - mi.StartTriangle - 1).Select(tri => new DLLx.TriInfo()
                {
                    id = 0,
                    v1 = (int)tri.v0.VertexIndex - nrm,
                    v2 = (int)tri.v1.VertexIndex - nrm,
                    v3 = (int)tri.v2.VertexIndex - nrm
                }).ToArray(),
                scene.Vertices.ToList().GetRange(mi.StartVertice, mi.EndVertice - mi.StartVertice).Select(v => new DLLx.VertInfo(v.x, v.y, v.z)).ToArray());
            Tracer.TraceLine("Start building");
            using (bvhHandle = new BVHHandle(triData, 2u, 4, 60, 20, 0.5f))
            {
                var data = bvhHandle.GetData();
                Tracer.TraceLine("Complete!");
                return data.
                    //Except(new[]{data.First()}).
               Select(item => new GpuSmitsBVHNode()
               {
                   bbox = new AABBInfo(new Point(item.bbox.pMin.x, item.bbox.pMin.y, item.bbox.pMin.z), new Point(item.bbox.pMax.x, item.bbox.pMax.y, item.bbox.pMax.z)),
                   primitive = item.primitive,
                   skipIndex = item.skipIndex
               }).ToArray();
            }

        }