public override Vector3 LocalGetSupportingVertexWithoutMargin(Vector3 vec0) { Vector3 supVec = new Vector3(); Vector3 vec = vec0; float lenSqr = vec.LengthSquared(); if (lenSqr < 0.0001f) { vec = new Vector3(1, 0, 0); } else { float rlen = 1f / (float)Math.Sqrt(lenSqr); vec *= rlen; } LocalSupportVertexCallback supportCallback = new LocalSupportVertexCallback(vec); Vector3 aabbMax = new Vector3(1e30f, 1e30f, 1e30f); _stridingMesh.InternalProcessAllTriangles(supportCallback, -aabbMax, aabbMax); supVec = supportCallback.SupportVertexLocal; return(supVec); }
public void Build(StridingMeshInterface triangles) { NodeTriangleCallback callback = new NodeTriangleCallback(_leafNodes); Vector3 aabbMin = new Vector3(-1e30f, -1e30f, -1e30f); Vector3 aabbMax = new Vector3(1e30f, 1e30f, 1e30f); triangles.InternalProcessAllTriangles(callback, aabbMin, aabbMax); //now we have an array of leafnodes in m_leafNodes _contiguousNodes = new OptimizedBvhNode[2 * _leafNodes.Count]; for (int i = 0; i < _contiguousNodes.Length; i++) _contiguousNodes[i] = new OptimizedBvhNode(); _curNodeIndex = 0; _rootNode = BuildTree(_leafNodes, 0, _leafNodes.Count); }
public void Build(StridingMeshInterface triangles) { NodeTriangleCallback callback = new NodeTriangleCallback(_leafNodes); Vector3 aabbMin = new Vector3(-1e30f, -1e30f, -1e30f); Vector3 aabbMax = new Vector3(1e30f, 1e30f, 1e30f); triangles.InternalProcessAllTriangles(callback, aabbMin, aabbMax); //now we have an array of leafnodes in m_leafNodes _contiguousNodes = new OptimizedBvhNode[2 * _leafNodes.Count]; for (int i = 0; i < _contiguousNodes.Length; i++) { _contiguousNodes[i] = new OptimizedBvhNode(); } _curNodeIndex = 0; _rootNode = BuildTree(_leafNodes, 0, _leafNodes.Count); }
protected void LocalProcessAllTriangles(ITriangleCallback callback, Vector3 aabbMin, Vector3 aabbMax) { FilteredCallback filterCallback = new FilteredCallback(callback, aabbMin, aabbMax); _meshInterface.InternalProcessAllTriangles(filterCallback, aabbMin, aabbMax); }