public PotreeNode(string name, PointCloudMetaData metaData, PotreeBoundingBox boundingBox, PotreeNode parent) { this.name = name; this.metaData = metaData; this.boundingBox = boundingBox; this.parent = parent; }
private static PotreeBoundingBox calculateBoundingBox(PotreeBoundingBox parent, int index) { Vector3d min = parent.Min(); Vector3d max = parent.Max(); Vector3d size = parent.Size(); //z and y are different here than in the sample-code because these coordinates are switched in unity if ((index & 2) != 0) { min.z += size.z / 2; } else { max.z -= size.z / 2; } if ((index & 1) != 0) { min.y += size.y / 2; } else { max.y -= size.y / 2; } if ((index & 4) != 0) { min.x += size.x / 2; } else { max.x -= size.x / 2; } return(new PotreeBoundingBox(min, max)); }
public GameObject CreateGameObject(string name, Vector3[] vertexData, Color[] colorData, PotreeBoundingBox boundingBox) { GameObject gameObject = new GameObject(name); Mesh mesh = new Mesh(); MeshFilter filter = gameObject.AddComponent <MeshFilter>(); filter.mesh = mesh; MeshRenderer renderer = gameObject.AddComponent <MeshRenderer>(); renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; renderer.receiveShadows = false; renderer.material = material; renderer.enabled = false; int[] indecies = new int[vertexData.Length]; for (int i = 0; i < vertexData.Length; ++i) { indecies[i] = i; } mesh.vertices = vertexData; mesh.colors = colorData; mesh.SetIndices(indecies, MeshTopology.Points, 0); //Set Translation //gameObject.transform.Translate(boundingBox.Min().ToFloatVector()); PrevisPotreeUpdate comp = gameObject.AddComponent <PrevisPotreeUpdate>(); comp.screenSize = screenSize; comp.interpolation = interpolation; gameObject.transform.parent = previsParent.transform; gameObject.transform.localPosition = boundingBox.Min().ToFloatVector(); if (gameObjectCollection != null) { gameObjectCollection.Add(gameObject); } return(gameObject); }