Public Member Functions | Properties

model3d Class Reference

3D模型类 More...

Inheritance diagram for model3d:
obj3d avatar3d

List of all members.

Public Member Functions

def __init__
def destroy
def get_anim_ctrl
def play_animation
def play_anim_group
def register_on_end_event
def register_action_key_event
def unregister_event
def bind
def unbind
def get_screen_pos
def set_pick
def unset_pick
def add_round_shadow
def add_plane_shadow
def set_shadow_visible
def accept_shadow
def clear_shadows
def add_mesh
def bind_bone
def get_anim_event_count
def get_anim_event_name
def get_anim_event_time
def get_anim_length
def get_anim_names
def get_animgroup_names
def get_bone_by_name
def get_bone_count
def get_bone_matrix
def get_bone_name
def get_bone_prs
def get_parent_bone
def get_root_bone
def get_root_bone_count
def get_socket_count
def get_socket_matrix
def get_socket_name
def get_socket_obj_count
def get_submesh_bounding_box
def get_submesh_bounding_radius
def get_submesh_center
def get_submesh_count
def get_submesh_name
def get_submesh_visible
def load_action
def play_anim_seq
def register_anim_key_event
def register_seq_end_event
def set_submesh_visible
def stop_animation
def unbind_bone
def set_submesh_texture

Properties

 alpha = property(_get_alpha, _set_alpha)
 透明度.
 name = property(_get_name)
 名字.
 size = property(_get_size)
 包围盒大小.
 idx = property(_get_idx)
 用于场景查询的索引标识.
 bounding_box = property(_get_bounding_box)
 包围盒大小(局部空间).
 bounding_radius = property(_get_bounding_radius)
 包围球半径(局部空间).
 anim_rate = property(_get_anim_rate, _set_anim_rate)
 骨骼动作播放速度倍率.

Detailed Description

3D模型类


Constructor & Destructor Documentation

def __init__ (   self,
  model_file,
  name = "",
  layer_id = None,
  async_callback = None,
  async_args = (),
  async_type = 2 
)
初始化

参数:
        model_file	:str	gim文件名
        name		:str	名字,必须唯一
        layer_id		:int	None代表用默认的层;如果是全3D场景,则请使用NO_2D_LAYER。如果是在 UI 中,则使用 scene3d_ui.get_ui_id()。
        async_callback	: function	异步加载后的回调函数,async_callback(async_args)
        async_args		: 回调函数的参数,如果是tuple/list,则回调函数有多个参数;如果是其他对象,则只返回一个参数;如果为(),则不返回参数
        async_type	: int 异步方式,此接口无效,将于近期删除

Member Function Documentation

def destroy (   self )
把该对象从场景中销毁
def get_anim_ctrl (   self,
  anim_type 
)
获取动画控制器

参数 :
  anim_type  : int  动画类型:
                iworld3d.ANIM_TYPE_SKELETAL = 1   骨骼动画
                iworld3d.ANIM_TYPE_MORPH = 2   变形动画
  
返回值 :
  iworld3d.anim_ctrl   对应的动画控制器
def play_animation (   self,
  name,
  transit_time = -1.0,
  transit_type = TRANSIT_TYPE_DEFAULT,
  init_time = 0,
  loop = PLAY_FLAG_DEF_LOOP,
  speed_rate = 1.0 
)
播放指定的骨骼动画

参数 :
  name          : string 或 int  动画名称或索引号
  transit_time  : float  仅骨骼动画有效。与前一个动画(组合)之间的过渡时间,小于零时表示使用动作文件中记录的值
  transit_type  : int  仅骨骼动画有效。过渡类型:
        TRANSIT_TYPE_NONE = 0, 不做过渡处理
        TRANSIT_TYPE_IMM = 1, 旧动画停止播放,并按当前骨骼状态直接过渡
        TRANSIT_TYPE_DELAY = 2, 旧动画延迟至最后一帧再开始过渡
        TRANSIT_TYPE_CROSS = 3, 旧动画继续播放,同时与新动画过渡
        TRANSIT_TYPE_MORPH = 4, 旧动画继续播放,并保证morph同步点与新动画中相同名称的morph点的时间重合的过渡
        TRANSIT_TYPE_DEFAULT = 16, 使用动作文件中记录的过渡类型,如果没有记录则自动选择最合适的过渡方式
  init_time     : float  开始播放的时间点
  loop          : int  循环类型:
        PLAY_FLAG_NO_LOOP = 0, 不循环
        PLAY_FLAG_LOOP = 1, 循环
        PLAY_FLAG_DEF_LOOP = 2, 按动作文件中的循环设定
  speed_rate    : float  播放速速度的倍率,与model3d.anim_rate不同的是它仅应用于anim指定的动画
  
返回值 :
  bool  播放是否成功
def play_anim_group (   self,
  group,
  transit_time = -1.0,
  transit_type = TRANSIT_TYPE_DEFAULT,
  speed_rate = 1.0 
)
播放组合动画(一组按不同优先级和权重同时混合播放的骨骼动画)

参数 :
  group : string 或 list
        string  表示组合动画的名称,组合信息来自ags文件,由模型编辑器编辑
        list  组合动画列表,列表每个元素表示一个动画,由一个5元组tuple表示:
                (anim, priority, weight, init_time, sync_to)
                anim            : string或int  动画名称或索引号
                priority        : int  在组合动画中的优先级,优先级高者完全占主导,通常优先级最低的是整体动画,高优先级的是分支动画
                weight          : float  与其它同优先级的动画组合时的混合权重
                init_time       : float  表示开始播放的时间点,如果为负并且anim与旧的组合动画中对应动画相同则该动画的当前时间不会改变
                sync_to         : int  一组动画中的序号,指定按照此动画同步,为-1时表示不同步
  transit_time  : float  同play_animation的transit_time
  transit_type  : int  同play_animation的transit_type
  speed_rate    : float  播放速速度的倍率,与model3d.anim_rate不同的是它仅应用于group中的每个动画
  
  返回值 :
  bool  播放是否成功
def register_on_end_event (   self,
  callback,
  multiple = True,
  data = None 
)
注册模型动作结束回调事件响应函数

参数:
  callback : func(neox_ref, [data])       回调函数
        其中neox_ref为引擎内部参数,请误使用。
        提示:回调函数中对self进行操作,可将self传入data中.
  multiple : bool              是否多次响应
  data     : object            回调函数的数据
  
返回值:无
说明:
  多次调用此函数,条件满足时,将会有多次事件回调。
def register_action_key_event (   self,
  key,
  callback,
  data = None 
)
注册模型动作关键帧回调事件响应函数

参数:
  key	: str	关键帧事件名字
  callback : func(neox_ref, anim_name, key, [data])    回调函数,anim_name是动作名字,key是关键帧事件名字
        其中neox_ref为引擎内部参数,请误使用。
        提示:回调函数中对self进行操作,可将self传入data中.
  data     : object            回调函数的数据
  
返回值:无
说明:
  多次调用此函数,条件满足时,将会有多次事件回调。
def unregister_event (   self,
  callback,
  key = "end",
  anim = -1 
)
取消注册模型相关回调事件响应函数

参数:
  callback	: func   需要取消的回调函数
  key	: str 关键帧事件名字
  anim	: int/str 动作名称或索引值。如果用register_action_key_event注册响应函数,则索引值为-1;如果用register_anim_key_event注册响应函数,索引值传入相应动作名
返回值:无
def bind (   self,
  socket,
  bindobj,
  bind_type = BIND_TYPE_DEFAULT 
)
绑定空间对象到Socket

提示:未绑定到别的模型时,请先调用leave_scene进行解除场景绑定操作.
参数 : 
  socket        : int或string  Socket序号或名字
  space_obj     : 支持按分量绑定空间对象(如model3d, fx3d, space_movie)
  bind_type     : int  绑定类型,可以是以下组合:
        BIND_TYPE_DEFAULT = 0  按mex文件中记录的挂接点默认绑定类型绑定
        BIND_TYPE_TRANSLATE = 1  绑定位移
        BIND_TYPE_ROTATE = 2  绑定旋转
        BIND_TYPE_SCALE = 4  绑定缩放
        BIND_TYPE_ALL = 7  绑定所有空间属性
        BIND_TYPE_TRANSLATE_WORLD = 8 绑定世界空间的位移
def unbind (   self,
  binding 
)
解除绑定空间对象

参数 : 
        binding       : int 或 3种空间对象(model3d, fx3d, space_movie)  
                如果是整数,表示解除绑定指定的Socket上所有空间对象。
                如果是空间对象,表示解除此空间对象
def get_screen_pos (   self )
按照当前模型的世界位置,返回屏幕坐标的pos
返回值 :
          (int, int)  屏幕坐标(screen_x, screen_y)
def set_pick (   self,
  flag = True 
)
设置对象允许被鼠标点中,前提是该对象必须有名字
设置物体是否参与pick/碰撞等检测,默认没有set_pick

参数:
        flag	:bool
def unset_pick (   self )
解除对象被鼠标点中
def add_round_shadow (   self,
  elliptical = True,
  size = (10,10,
  bone = 0,
  light_dir = None 
)
添加一个圆影

参数 :
  elliptical    : bool  是否椭圆
  size          : (size_x, size_y)  圆影大小
  bone          : int或string  阴影跟随哪根骨骼。为0时表示跟随骨骼中心
  light_dir     : math3d.vector  光方向。为None时表示竖直向下投影
def add_plane_shadow (   self,
  plane,
  light_name 
)
添加一个平面阴影

参数 :
  plane    : (math3d.vector, math3d.vector) 影子所在的平面,表示为(n, p)即(法线, 平面上一点)
  light_name     : str 模型所在场景的光源名称
def set_shadow_visible (   self,
  flag 
)
阴影是否可见 

参数:
  flag	: bool 是否可见
def accept_shadow (   self,
  flag 
)
此模型接受阴影、贴花。

参数:
  flag	: bool 是否接受阴影。模型初始化时为False
def clear_shadows (   self )
清除所有阴影
def add_mesh (   self,
  mesh_file 
)
加载换装模型文件.
共用一套骨骼系统的模型可以进行合并.可多次调用合并不同的模型.
特别注意:绑定的gis文件不一样的gim文件禁止进行合并.

参数:
  mesh_file	: str 模型的文件路径(.gim) 
def bind_bone (   self,
  bone,
  space_obj,
  mat,
  bind_type = BIND_TYPE_ALL 
)
绑定空间对象到骨骼.

提示:未绑定到别的模型时,请先调用leave_scene进行解除场景绑定操作.
参数:
  bone : int或string Bone序号或名字
  space_obj : 支持空间对象(如model3d, fx3d, space_movie)
  mat : math3d.matrix space_obj相对于bone的局部矩阵
  bind_type : int 绑定类型,可以是以下组合:
                        BIND_TYPE_TRANSLATE = 1 绑定位移
                        BIND_TYPE_ROTATE = 2 绑定旋转
                        BIND_TYPE_SCALE = 4 绑定缩放
                        BIND_TYPE_ALL = 7 绑定所有空间属性
                        BIND_TYPE_TRANSLATE_WORLD = 8 绑定世界空间的位移
def get_anim_event_count (   self,
  anim 
)
获取动画事件数.

参数:
  anim : string或int 动画的索引或名字,如果为None表示当前动画.
返回值:
  int 事件数
def get_anim_event_name (   self,
  anim,
  idx 
)
获取动画事件名称.

参数:
  anim : string或int 动画的索引和名字,如果为None表示当前动画.
  idx : int 事件索引
返回值:
  string 事件名字
def get_anim_event_time (   self,
  anim,
  idx 
)
获取动画事件时间.

参数:
  anim : string或int 动画的索引和名字,如果未None表示当前动画.
  idx : int 事件索引
返回值:
  float 时间(毫秒)
def get_anim_length (   self,
  anim 
)
获取动画长度(毫秒).

参数:
  anim : string或int 动画的索引和名字.
返回值:
  float 长度
def get_anim_names (   self )
获取动画动作名字列表.

返回值:
  tuple 名字列表
def get_animgroup_names (   self )
获取动画动作组合名字列表.

返回值:
  tuple 名字列表
def get_bone_by_name (   self,
  name 
)
由骨骼名字获取骨骼索引

参数:
  name : string 骨骼名字
返回值:
  int 骨骼索引
def get_bone_count (   self )
获取骨骼总数.

返回值:
        int 骨骼总数
def get_bone_matrix (   self,
  bone,
  space_type = SPACE_TYPE_PARENT 
)
取得骨骼节点的矩阵.

参数:
  bone : int或string 骨骼索引或名字
  space_type : int 空间类型:
                        iworld3d.SPACE_TYPE_PARENT = 0 父空间
                        iworld3d.SPACE_TYPE_WORLD = 1 世界空间
                        iworld3d.SPACE_TYPE_LOCAL = 2 局部空间
返回值:
  math3d.matrix 骨骼矩阵
def get_bone_name (   self,
  idx 
)
由骨骼索引获取骨骼名字.

参数:
  idx : int 骨骼索引
返回值:
  string 骨骼名字
def get_bone_prs (   self,
  bone 
)
取得骨骼节点的位置、方向和比例(相对于父骨骼节点)

参数:
  bone : int或string 骨骼索引或名字
返回值:
  (math3d.vector, math3d.rotation, math3d.vector) (位置,方向,比例)
def get_parent_bone (   self,
  idx 
)
获取父骨骼.

参数:
  idx : int 骨骼索引
返回值:
  int : 父骨骼索引,如果自己是根节点则返回-1
def get_root_bone (   self,
  root_idx = 0 
)
获取根骨骼.

参数:
  root_idx : int 根骨骼序号
返回值:
  int : 根骨骼索引
def get_root_bone_count (   self )
获取根骨骼数.

返回值:
  int 根骨骼数
def get_socket_count (   self )
获取挂接点数量.

返回值:
  int 挂接点数量
def get_socket_matrix (   self,
  socket,
  space_type = SPACE_TYPE_PARENT 
)
取得socket的矩阵.

参数:
        socket : int或string socket索引或名字
        space_type : int 空间类型:
                iworld3d.SPACE_TYPE_PARENT = 0 父空间
                iworld3d.SPACE_TYPE_WORLD = 1 世界空间
                iworld3d.SPACE_TYPE_LOCAL = 2 局部空间
返回值:
        math3d.matrix 矩阵
def get_socket_name (   self,
  socket_id 
)
获取挂接点的名字

参数:
        socket_id : int 挂接点序号
返回值:
        string : 挂接点名字
def get_socket_obj_count (   self,
  socket 
)
获取挂接点的固有挂街物数量.动态绑定的不算。

参数:
        socket : int或string
返回值:
        int : 挂接点所挂接的固有物体数量
def get_submesh_bounding_box (   self,
  submesh,
  space_type = SPACE_TYPE_LOCAL 
)
获取子模型的包围盒大小.

参数:
        submesh : int或string 子模型索引或名字
        space_type : int 空间类型
                iworld3d.SPACE_TYPE_PARENT = 0 父空间
                iworld3d.SPACE_TYPE_WORLD = 1 世界空间
                iworld3d.SPACE_TYPE_LOCAL = 2 局部空间
返回值:
        math3d.vector 包围盒大小
def get_submesh_bounding_radius (   self,
  submesh,
  space_type = SPACE_TYPE_LOCAL 
)
获取子模型的包围球半径.

参数:
        submesh : int或string 子模型索引或名字
        space_type : int 空间类型
                iworld3d.SPACE_TYPE_PARENT = 0 父空间
                iworld3d.SPACE_TYPE_WORLD = 1 世界空间
                iworld3d.SPACE_TYPE_LOCAL = 2 局部空间
返回值:
        float 包围球半径
def get_submesh_center (   self,
  submesh,
  space_type = SPACE_TYPE_LOCAL 
)
获取子模型的包围球(盒)中心.

参数:
        submesh : int或string 子模型索引或名字
        space_type : int 空间类型
                iworld3d.SPACE_TYPE_PARENT = 0 父空间
                iworld3d.SPACE_TYPE_WORLD = 1 世界空间
                iworld3d.SPACE_TYPE_LOCAL = 2 局部空间
返回值:
        math3d.vector 子模型中心
def get_submesh_count (   self )
获取子模型数

返回值 :
        int 子模型数
def get_submesh_name (   self,
  sub_idx 
)
获取子模型的名字

参数:
        sub_idx : int 子模型序号
返回值:
        string 子模型名字
def get_submesh_visible (   self,
  submesh 
)
获取子模型的可见性

参数 :
        submesh : int或string 子模型索引或名字
返回值 :
        bool 是否可见
def load_action (   self,
  anim_source 
)
加载动作文件

参数:
        anim_source : string 模型的文件路径(.gis)
def play_anim_seq (   self,
  anim_seq 
)
播放序列动画
(一组按照固定顺序连续播放的骨骼动画),序列信息来自ags文件,由模型编辑器编辑

参数 :
        anim_seq : string 序列动画名称
返回值 :
        bool 播放是否成功
def register_anim_key_event (   self,
  anim,
  key,
  callback,
  data = None 
)
注册模型动作关键帧回调事件响应函数.

参数:
        anim : int或string 动作名称
        key : string 关键帧事件
        callback : func(neox_ref, anim_name, key, [data])    回调函数
                其中neox_ref为引擎内部参数,请误使用。
                提示:回调函数中对self进行操作,可将self传入data中.
        data : 回调函数的数据
说明:
多次调用此函数,条件满足时,将会有多次事件回调。
def register_seq_end_event (   self,
  callback,
  multiple = True,
  data = None 
)
注册模型动作序列结束回调事件响应函数.

参数:
        callback : func(neox_ref, [data])	回调函数
                其中neox_ref为引擎内部参数,请误使用。
                提示:回调函数中对self进行操作,可将self传入data中.
        multiple : bool					是否多次响应
        data	 : 回调函数的数据
说明:
多次调用此函数,条件满足时,将会有多次事件回调。
def set_submesh_visible (   self,
  submesh,
  visible = True 
)
设置子模型的可见性

参数:
        submesh : int或string 子模型索引或名字
        visible : bool 是否可见
def stop_animation (   self )
停止播放当前骨骼动画
def unbind_bone (   self,
  binding 
)
解除绑定空间对象

参数:
        binding : 3种空间对象(model3d, fx3d, space_movie)  
                如果是空间对象,表示解除此空间对象
def set_submesh_texture (   self,
  submesh,
  tex_file 
)
设置子模型的贴图
说明:目前只支持一层贴图,多层贴图请通过编辑器设置.

参数:
        submesh : int或string 子模型索引或名字
        tex_file : string 贴图文件路径

Property Documentation

alpha = property(_get_alpha, _set_alpha) [static]

透明度.

int 0-255 读写.

name = property(_get_name) [static]

名字.

str 只读.

size = property(_get_size) [static]

包围盒大小.

(x, y, z) 只读.

idx = property(_get_idx) [static]

用于场景查询的索引标识.

str 只读.

bounding_box = property(_get_bounding_box) [static]

包围盒大小(局部空间).

math3d.vector 只读

bounding_radius = property(_get_bounding_radius) [static]

包围球半径(局部空间).

float 只读

anim_rate = property(_get_anim_rate, _set_anim_rate) [static]

骨骼动作播放速度倍率.

float 读写. 一个模型所有动作共用的速度值,1.0为正常值.

 All Classes Namespaces Functions Variables Properties