客户端--3D碰撞检测 More...
Classes | |
class | iphy3d_exception |
碰撞检测异常,继承于python的Exception. More... | |
class | col_filter |
碰撞检测过滤器 More... | |
class | col_result |
碰撞检测结果 More... | |
class | col_object |
可碰撞物体的基类,不需要直接创建,通过col_sphere/col_box创建后可以访问其公有属性 More... | |
class | col_sphere |
球型碰撞体 More... | |
class | col_box |
长方体碰撞体 More... | |
class | col_capsule |
胶囊体碰撞体. More... | |
class | col_cylinder |
圆柱体碰撞体. More... | |
class | col_model |
模型碰撞体,三角形组成的复杂几何体,碰撞精度最高,但计算量也最大 注意:1 模型体如果不是凸多边形组成的,那么不能用于sweep_test。 2 不会受model的位置变换的影响,需自己维护碰撞体的旋转矩阵 3 碰撞体模型必须为3dmax导出 4 推荐为碰撞体单独做低模,降低计算量 5 做碰撞检测时,请不要将模型碰撞体作为去碰的碰撞体,返回结果会不确定。 More... | |
Functions | |
def | set_debug_draw |
def | set_draw_range |
def | hit_by_ray |
射线碰撞测试,返回从起始位置起第一个碰撞的结果 | |
def | static_test |
静态碰撞测试,返回碰撞体列表 | |
def | sweep_test |
凸扫碰撞测试,返回从起始位置起第一个碰撞的结果,如果传入的碰撞体不是 col_sphere/col_box/col_capsule/col_cylinder,会抛出iphy3d.iphy3d_exception 注意:目前存在改变碰撞体的rotation_matrix后,sweep_test仍使用的是原有碰撞体属性的bug. | |
def | update |
更新碰撞系统,向场景中增加或移动被碰撞体后必须调用 | |
Variables | |
EXCLUDE_FILTER = collision.EXCLUDE_FILTER | |
过滤方式 : 与标记位不包含的碰 | |
EQUAL_FILTER = collision.EQUAL_FILTER | |
过滤方式 : 与标记位相等的碰 | |
INEQUAL_FILTER = collision.INEQUAL_FILTER | |
过滤方式 : 与标记位不相等的碰 |
客户端--3D碰撞检测
def iphy3d.set_debug_draw | ( | layer_id, | |
flag | |||
) |
是否激活碰撞信息的显示 参数: layer_id : int iworld2d对应的layer_id,用于指示哪个3D场景 全3D请用 iworld3d.NO_2D_LAYER flag : bool True为开启显示,False为隐藏
def iphy3d.set_draw_range | ( | layer_id, | |
x, | |||
y, | |||
z, | |||
radius | |||
) |
设置显示碰撞信息的范围 参数: layer_id : int iworld2d对应的layer_id,用于指示哪个3D场景 全3D请用 iworld3d.NO_2D_LAYER x : float 中心点的x坐标 y : float 中心点的y坐标 z : float 中心点的z坐标 radius : float 显示碰撞信息的半径
def iphy3d.hit_by_ray | ( | layer_id, | |
start, | |||
end, | |||
filter = None |
|||
) |
射线碰撞测试,返回从起始位置起第一个碰撞的结果
layer_id | : int iworld2d对应的layer_id,用于指示哪个3D场景 全3D请用 iworld3d.NO_2D_LAYER |
start | : math3d.vector 射线的起点 |
end | : math3d.vector 射线的终点 |
filter | : iphy3d.col_filter 碰撞过滤器 默认值为None,对应的filter为 mask = 0, category = 0, filter_type = EXCLUDE_FILTER |
: | iphy3d.col_result 碰撞检测结果 |
def iphy3d.static_test | ( | layer_id, | |
col_obj, | |||
filter = None |
|||
) |
静态碰撞测试,返回碰撞体列表
layer_id | : int iworld2d对应的layer_id,用于指示哪个3D场景 全3D请用 iworld3d.NO_2D_LAYER |
col_obj | : iphy3d.col_object 碰撞体 |
filter | : iphy3d.col_filter 碰撞过滤器. 默认值为None,对应的filter为 mask = 0, category = 0, filter_type = EXCLUDE_FILTER . 使用EQUAL_FILTER去检测碰撞,性能有所提高 |
: | list 碰撞体列表 |
def iphy3d.sweep_test | ( | layer_id, | |
col_obj, | |||
start, | |||
end, | |||
filter = None |
|||
) |
凸扫碰撞测试,返回从起始位置起第一个碰撞的结果,如果传入的碰撞体不是 col_sphere/col_box/col_capsule/col_cylinder,会抛出iphy3d.iphy3d_exception 注意:目前存在改变碰撞体的rotation_matrix后,sweep_test仍使用的是原有碰撞体属性的bug.
layer_id | : int iworld2d对应的layer_id,用于指示哪个3D场景 全3D请用 iworld3d.NO_2D_LAYER |
col_obj | : iphy3d.col_object 碰撞体 |
start | : math3d.vector 起始位置 |
end | : math3d.vector 结束位置 |
filter | : iphy3d.col_filter 碰撞过滤器。 默认值为None,对应的filter为 mask = 0, category = 0, filter_type = EXCLUDE_FILTER |
: | iphy3d.col_result 碰撞检测结果 |
def iphy3d.update | ( | layer_id ) |
更新碰撞系统,向场景中增加或移动被碰撞体后必须调用
layer_id | : int iworld2d对应的layer_id,用于指示哪个3D场景 全3D请用 iworld3d.NO_2D_LAYER |