Classes | Functions | Variables

Package iworld3d
[Client Modules]

客户端--3D渲染模块(包括2D/3D混合渲染和3D场景) More...

Classes

class  scene_mgr
class  scene3d_ui
 iworld2d模块——3D UI画布类. More...
class  obj3d
 3D可见对象基类 More...
class  scene3d
 全3D场景类. More...
class  space_movie
 3D空间中的Flash影片 More...
class  camera3d
 3D相机控制类,不需要初始化。
通过get_camera接口可以获取到某个层次场景的3D相机控制实例 More...
class  light3d
 动态光源类,通过 iworld3d.create_lightiworld3d.scene3d.create_light 创建实例。 More...
class  fx3d
 3D特效类 More...
class  anim_ctrl
 3D模型动画控制器,不需要实例化,每个模型都有2个实例 More...
class  model3d
 3D模型类 More...
class  avatar_mgr
 avatar 的管理类. More...
class  avatar3d
 avatar 3D模型. More...

Functions

def init
def add_scene_to_layer2d
def create_scene3d
def create_scene3d_ui
def get_scene3d_ui
def destroy_scene3d_ui
def create_terrain_scene3d
def destroy
def get_camera
def set_camera_ortho
def set_camera_perspect
def set_camera_pos
def set_camera_placement
def pick
def screen_to_world
def world_to_screen
def create_light
def get_light

Variables

int SPACE_TYPE_PARENT = 0
 父空间.
int SPACE_TYPE_WORLD = 1
 世界空间.
int SPACE_TYPE_LOCAL = 2
 局部空间.
int NO_2D_LAYER = 256
 3D模式下,layer_id的初始化参数

Detailed Description

客户端--3D渲染模块(包括2D/3D混合渲染和3D场景)


Function Documentation

def iworld3d.init (  )
初始化3D模块,同时会初始化iphy3d模块
def iworld3d.add_scene_to_layer2d (   layer_id,
  scn_file = "",
  half_size = None 
)
生成一个场景绑定到某个iworld2d的layer下
此场景的遮挡层次也和iworld2d的layer一样
默认相机会在(0,0,0)点,朝向(0,0,-1)

目前不需要场景文件,scn_file一项为空即可,另外场景默认背景色是青色
也会默认生成一个平行光源,方向是垂直向下,其光源名称为 "light_1"

提示:不能和 iworld3d.create_scene3d同时使用.

参数:
        layer_id : int iworld2d对应的layer_id,用于此3D场景显示在哪一层
        scn_file : str 场景文件名,目前无用
        half_size : math3d.vector 场景可视范围的盒子,默认是(10000,10000,10000),模型的坐标绝对值超过盒子范围会不显示
def iworld3d.create_scene3d (   scn_file = "",
  half_size = None 
)
生成一个全3D场景,且该场景为当前活动场景.
目前只提供生成一个场景,即不能同时存在多个全3d场景。

提示:不能和 iworld3d.add_scene_to_layer2d同时使用.

参数:
        scn_file : str 场景文件名,该文件为3D场景编辑器编辑而来的文件。
                                如果为空,则默认会生成一个空场景,场景默认背景色是青色
                                也会默认生成一个平行光源,方向是垂直向下,其光源名称为 "light_1"
        half_size : math3d.vector 场景可视范围的盒子,默认是(10000,10000,10000),模型的坐标绝对值超过盒子范围会不显示

返回值:
        iworld3d.scene3d : 3d场景实例,失败则返回None
def iworld3d.create_scene3d_ui (   scn_file,
  half_size = None,
  depth = 0 
)
        生成一个 iworld3d.scene3d_ui 对象。
        参数:
                scn_file : str 场景文件名,该文件为3D场景编辑器编辑而来的文件。
                                        如果为空,则默认会生成一个空场景,场景默认背景色是黑色
                                        也会默认生成一个平行光源,方向是垂直向下,其光源名称为 "light_1"
                half_size : math3d.vector 场景可视范围的盒子,默认是(10000,10000,10000),模型的坐标绝对值超过盒子范围会不显示
                depth : int 该ui对象的层次
        
        返回值:
                iworld3d.scene3d_ui : 返回的ui对象;如果失败则返回None
        
def iworld3d.get_scene3d_ui (   ui_id )
通过 id获取 iworld3d.scene3d_ui 对象。
参数:
        ui_id : int UI对象的id

返回值:
        iworld3d.scene3d_ui : 返回的ui对象;如果失败则返回None
def iworld3d.destroy_scene3d_ui (   ui_id )
通过 id销毁 iworld3d.scene3d_ui 对象。
参数:
        ui_id : int UI对象的id
def iworld3d.create_terrain_scene3d (   scn_file,
  async_callback = None,
  async_args = () 
)
        生成一个带地形的3D场景,且该场景为当前活动场景.
        
        提示:不能和 iworld3d.add_scene_to_layer2d同时使用.
        
        参数:
                scn_file : str 场景文件名,该文件为3D场景编辑器编辑而来的文件。
                                        如果为空,则默认会生成一个空场景,场景默认背景色是青色
                                        也会默认生成一个平行光源,方向是垂直向下,其光源名称为 "light_1"
                async_callback : 异步加载回调函数
                async_args : 异步加载回调参数
        返回值:
                iworld3d.scene3d : 3d场景实例,失败则返回None
def iworld3d.destroy (  )
清除场景所有对象。慎用,因为会造成大量引用泄露,此接口一般用于开发期debug。

建议把ifxpool和iworld3d.model3d 分别destroy
def iworld3d.get_camera (   layer_id )
获取指定场景的相机

参数 :
        layer_id	: int iworld2d对应的layer_id。如果在全3D场景中,layer_id参数请使用 iworld3d.NO_2D_LAYER
        
返回值:
        camera3d实例
def iworld3d.set_camera_ortho (   layer_id,
  width,
  height,
  min_z,
  max_z 
)
设置正交相机

参数 :
        layer_id	: int iworld2d对应的layer_id。如果在全3D场景中,layer_id参数请使用 iworld3d.NO_2D_LAYER
        width	: float  视口宽度
        height	: float  视口高度
        min_z	: float  近裁平面的z值
        max_z	: float  远裁平面的z值
def iworld3d.set_camera_perspect (   layer_id,
  angle,
  min_z,
  max_z 
)
设置透视相机

参数 :
        layer_id	: int iworld2d对应的layer_id。如果在全3D场景中,layer_id参数请使用 iworld3d.NO_2D_LAYER
        angle	: float 竖直方向视角(角度)
        min_z	: float  近裁平面的z值
        max_z	: float  远裁平面的z值
def iworld3d.set_camera_pos (   layer_id,
  x,
  y,
  z = 0 
)
设置相机位置

参数 :
        layer_id	: int iworld2d对应的layer_id。如果在全3D场景中,layer_id参数请使用 iworld3d.NO_2D_LAYER
        x		: float x坐标
        y		: float y坐标
        z		: float z坐标
def iworld3d.set_camera_placement (   layer_id,
  pos,
  forward,
  up 
)
设置相机位置和朝向
需要注意的是,为了保持和world2d的x/y正方向一致,所以相机已经绕x轴旋转180度,也就是up的值为math3d.vector(0, -1, 0)

参数 :
        layer_id	: int iworld2d对应的layer_id。如果在全3D场景中,layer_id参数请使用 iworld3d.NO_2D_LAYER
        pos		: math3d.vector 相机位置
        forward	: math3d.vector 相机前方向
        up		: math3d.vector 相机上方向
def iworld3d.pick (   layer_id,
  x,
  y 
)
屏幕一点与3D场景中设置过set_pick的3D对象做碰撞检测,如果屏幕同一点叠有多个对象,会得到与相机最近的对象。
如果2D对象需要做碰撞检测,还需要先obj2d.set_pick()
ps: 名字以_开头的,不会pick

参数:
        layer_id	: int	iworld2d对应的layer_id。如果在全3D场景中,layer_id参数请使用 iworld3d.NO_2D_LAYER
        x		: int	屏幕坐标x
        y		: int	屏幕坐标y
返回值:
        model3d
        如果没碰撞,则返回None
def iworld3d.screen_to_world (   layer_id,
  x,
  y 
)
屏幕坐标到世界坐标变换

参数:
        layer_id	: int	iworld2d对应的layer_id。如果在全3D场景中,layer_id参数请使用 iworld3d.NO_2D_LAYER
        x	: int 屏幕x坐标
        y	: int 屏幕y坐标
返回值 :
        (math3d.vector, math3d.vector)  世界坐标下的射线(p0, dir), p0是原点, dir是方向
def iworld3d.world_to_screen (   layer_id,
  pos 
)
世界坐标到屏幕坐标变换

参数:
        layer_id	: int	iworld2d对应的layer_id。如果在全3D场景中,layer_id参数请使用 iworld3d.NO_2D_LAYER
        pos		: math3d.vector 世界坐标
返回值 :
        (x, y)  屏幕坐标
def iworld3d.create_light (   layer_id,
  type 
)
创建动态光源
慎用,目前不能单独对光源进行销毁,所以如果大量使用可能会产生效率问题

参数 :
        layer_id	: int iworld2d对应的layer_id。如果在全3D场景中,layer_id参数请使用 iworld3d.NO_2D_LAYER
        type		: int 光源类型
                                iworld3d.LIGHT_TYPE_POINT = 1  点光源
                                iworld3d.LIGHT_TYPE_SPOT = 2  聚光灯光源
                                iworld3d.LIGHT_TYPE_DIRECTION = 3  平行光源
        
返回值:
        iworld3d.light3d 光源实例
def iworld3d.get_light (   layer_id,
  light_name 
)
获取指定场景的光源

参数 :
        layer_id	: int iworld2d对应的layer_id。如果在全3D场景中,layer_id参数请使用 iworld3d.NO_2D_LAYER
        light_name	: str 光源名
        
返回值:
        iworld3d.light3d 实例

Variable Documentation

父空间.

世界空间.

局部空间.

 All Classes Namespaces Functions Variables Properties