예제 #1
0
        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);
        }
예제 #2
0
		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);
		}
예제 #3
0
        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);
        }
예제 #4
0
        protected void LocalProcessAllTriangles(ITriangleCallback callback, Vector3 aabbMin, Vector3 aabbMax)
        {
            FilteredCallback filterCallback = new FilteredCallback(callback, aabbMin, aabbMax);

            _meshInterface.InternalProcessAllTriangles(filterCallback, aabbMin, aabbMax);
        }