Example #1
0
    private int InitScene(out List <Node> tree, out List <Triangle> datas, out List <PathTracerMaterial> materials)
    {
        Bounds bounds;
        var    triangles = GetTrianglesInScene(out bounds);

        tree      = null;
        datas     = null;
        materials = new List <PathTracerMaterial>();

        List <Triangle> tris = new List <Triangle>();

        foreach (var t in triangles)
        {
            for (int i = 0; i < t.Value.Count; i++)
            {
                Triangle triangle = t.Value[i];
                triangle.matid = materials.Count;
                tris.Add(triangle);
            }

            PathTracerMaterial mat = t.Key.GetMaterial();

            materials.Add(mat);
        }

        return(LBVH.BuildBVH(tris, bounds, ref tree, ref datas));
    }
Example #2
0
    private int FlattenTree(BVHNode node, ref int offset)
    {
        LBVH linearNode = new LBVH();

        linearNode.min = node.boundingBox.min;
        linearNode.max = node.boundingBox.max;
        int myOffset = offset++;

        if (node.children == null)
        {
            int primitives = node.meshCount << 16;
//            int n = (int) (primitives >> 16);
            linearNode.primAndAxis = primitives;
            linearNode.offset      = node.meshIndexStart;

//            Debug.Log(linearNode.offset);

            flatTree[myOffset] = linearNode;
        }
        else
        {
            linearNode.primAndAxis = node.splitAxis;
            //linearNode.primAndAxis |= (int) (linearNode.primAndAxis ^ 4294901760);

            FlattenTree(node.children[0], ref offset);

            linearNode.offset = FlattenTree(node.children[1], ref offset);

            flatTree[myOffset] = linearNode;
        }

        return(myOffset);
    }
 private void OnGUI()
 {
     if (GUI.Button(new Rect(100, 100, 200, 150), "span Morton Code"))
     {
         LBVH bVH = new LBVH();
         bVH.CreateAABB(3, 3, 3);
     }
 }
Example #4
0
    private int InitScene(out List <Node> tree, out List <Triangle> datas)
    {
        Bounds bounds;
        var    triangles = Utils.GetTrianglesInScene(true, out bounds);

        tree  = null;
        datas = null;

        //return LKDTree.BuildKDTree(triangles, 0, 7, ref tree, ref datas);
        return(LBVH.BuildBVH(triangles, bounds, ref tree, ref datas));
    }