示例#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 override void BatchedUnitVectorGetSupportingVertexWithoutMargin(Vector3[] vectors, Vector3[] supportVerticesOut)
        {
            //use 'w' component of supportVerticesOut?

            /*{
             *      for (int i = 0; i < numVectors; i++)
             *      {
             *              supportVerticesOut[i][3] = -1e30f;
             *      }
             * }*/
            for (int j = 0; j < vectors.Length; j++)
            {
                Vector3 vec = vectors[j];
                LocalSupportVertexCallback supportCallback = new LocalSupportVertexCallback(vec);
                Vector3 aabbMax = new Vector3(1e30f, 1e30f, 1e30f);
                _stridingMesh.InternalProcessAllTriangles(supportCallback, -aabbMax, aabbMax);
                supportVerticesOut[j] = supportCallback.SupportVertexLocal;
            }
        }
		public override void BatchedUnitVectorGetSupportingVertexWithoutMargin(Vector3[] vectors, Vector3[] supportVerticesOut)
		{
			//use 'w' component of supportVerticesOut?
			/*{
				for (int i = 0; i < numVectors; i++)
				{
					supportVerticesOut[i][3] = -1e30f;
				}
			}*/
			for (int j = 0; j < vectors.Length; j++)
			{
				Vector3 vec = vectors[j];
				LocalSupportVertexCallback supportCallback = new LocalSupportVertexCallback(vec);
				Vector3 aabbMax = new Vector3(1e30f, 1e30f, 1e30f);
				_stridingMesh.InternalProcessAllTriangles(supportCallback, -aabbMax, aabbMax);
				supportVerticesOut[j] = supportCallback.SupportVertexLocal;
			}
		}
		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;
		}