在使用HeightField作为碰撞体的时候,要特别注意这个tessFlag,它决定了Physx最终生成三角形的方式,它最好与地形生产三角形方向一致。不然可能会导致某些奇异现象,特别是在比较陡峭的地方。
我最近做同步的时候就遇到了一个这样的问题, 人居然可以无障碍的穿过一块凸出来的石壁。我开始很纳闷,后来搜索Convex时候发现了这个tessFlag,刚开始也没有完全想明白,就试验了一下,发现果然就是因为tesselation方向可能与地形tesselation方向不match导致的。
A ------------------ B
| /
| /
| /
| /
|________ /D
C
比如Heightmap上面有 ABCD四个sample, 到底按照ACD与ABD还是ABC与BCD划分生成三角形呢?如果ABCD相对比较平坦,两种方式都无所谓。如果ABCD是非常陡峭的,4个点完全不在一个平面上落差很多, 前面两种划分方式就会差很多。比如假设 BC是凹进去的,AD是凸出来的, 你会发现ACD和ABD平面是位于ABC和BCD之上的,如果你在这两种不同情况下作碰撞,结果可想而知会差非常多。