代表任意三角形网格(TriMesh)的三角形集合。三角网格碰撞系统具有以下特点:
*任何三角形可以表示“soup” - 即三角形不需要有什么特别的条状,风扇或网格结构。
*三角网格球,盒子,鳐鱼和其他三角形网格互动。
*它的工作原理以及比较大的三角形。
*它使用时间相干性,加快碰撞测试。当几何核对一个trimesh一次碰撞时,数据被存储内的trimesh。这些数据可以清除与dGeomTriMesh -ClearTCCache()函数。在未来将有可能禁用此功能。
Trimesh/ Trimesh的碰撞,表现相当不错,但也有三个轻微的警告:
*您使用的步长,一般来说,有精确的碰撞分辨率降低。非凸形状的碰撞更加依赖于比原始的碰撞的碰撞几何体。此外,当地的接触几何将更加迅速地改变(在更复杂的方式)非凸多面体比它的简单,凸多面体,球体和立方体等。
*为了有效地解决的碰撞,dCollideTTL需要在以前的时间步长的碰撞trimeshes的位置。这被用来计算每个碰撞三角形,这是用来查找的方向的影响,估计的速度,与法线等,这要求用户更新
这些变量在每一个时间步长。以外的常微分方程进行此更新,因此,这是不包括在ODE本身。做到这一点的代码看起来像这样:
const double *DoubleArrayPtr = Bodies[BodyIndex].TransformationMatrix->GetArray();
dGeomTriMeshDataSet( TriMeshData,TRIMESH_LAST_TRANSFORMATION,(void *) DoubleArrayPtr );
变换矩阵是标准的4×4的齐次变换矩阵,和的“DoubleArray”是展平的标准阵列的16个矩阵值。
注:三角形网格类不是最终的,所以,可以预料在未来的API的变化。
dTriMeshDataID dGeomTriMeshDataCreate();
void dGeomTriMeshDataDestroy (dTriMeshDataID g);
创建和破坏一个dTriMeshData的对象,这是用于存储的网格数据。
void dGeomTriMeshDataBuild (dTriMeshDataID g, const void* Vertices,
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余4页未读,立即下载