Class: ConvexObjectBreaker

Glodon.CIMCube.Utils. ConvexObjectBreaker

凸包可破碎物体几何剖分器 在撞击点/法线附近用平面切割凸包网格,输出碎块几何数据。 { position: Cartesian3, quaternion: Quaternion, geometry: { attributes: { position: { array: Float32Array }, // 非索引三角面 soup normal: { array: Float32Array } }, getIndex: () => null }, userData: {} }

new ConvexObjectBreaker( [minSizeForBreak] [, smallDelta])

凸包可破碎物体几何剖分器构造函数
Parameters:
Name Type Argument Default Description
minSizeForBreak number <optional>
1.4 碎块可再破碎的最小边长(米)
smallDelta number <optional>
0.0001 判定点共面/贴平面的距离阈值
Example
const breaker = new Glodon.CIMCube.Utils.ConvexObjectBreaker();
breaker.prepareBreakableObject(obj, mass, vel, angVel, true);
const debris = breaker.subdivideByImpact(obj, impactPoint, normal, 1, 2);

Methods


cutByPlane(object, plane [, output])

用平面切割凸包,得到两侧碎块
Parameters:
Name Type Argument Description
object Object 源对象
plane Plane 切割平面(Cesium.Plane,源几何局部空间)
output Object <optional>
输出容器
Properties
Name Type Argument Description
object1 Object <optional>
正向侧碎块
object2 Object <optional>
负向侧碎块
Returns:
含 object1、object2(任一侧为空则为 null)的结果
Type
Object
Example
const plane = Cesium.Plane.fromPointNormal(point, normal);
breaker.cutByPlane(obj, plane);

prepareBreakableObject(object, mass [, velocity] [, angularVelocity] [, breakable])

标记可破碎对象(写入 userData:mass / velocity / angularVelocity / breakable)
Parameters:
Name Type Argument Default Description
object Object 凸包几何对象
mass number 质量(kg)
velocity Cartesian3 <optional>
线速度
angularVelocity Cartesian3 <optional>
角速度
breakable boolean <optional>
true 是否可破碎
Returns:
object
Type
Object

subdivideByImpact(object, pointOfImpact, normal [, maxRadialIterations] [, maxRandomIterations])

按撞击点 / 法线细分可破碎凸包
Parameters:
Name Type Argument Default Description
object Object 已 prepareBreakableObject 的对象
pointOfImpact Cartesian3 撞击点(与 object.position 同一坐标系)
normal Cartesian3 撞击法线
maxRadialIterations number <optional>
1 径向切割次数
maxRandomIterations number <optional>
2 随机切割次数
Returns:
碎块列表;无法细分时返回 []
Type
Array.<Object>