客户端--3D渲染模块(包括2D/3D混合渲染和3D场景)
More...
Detailed Description
客户端--3D渲染模块(包括2D/3D混合渲染和3D场景)
Function Documentation
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
清除场景所有对象。慎用,因为会造成大量引用泄露,此接口一般用于开发期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