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)); }
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); } }
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)); }