Container 容器
本框架的数据交互中心
基本用法
通过Container
构建一个渲染容器,之后我们创建一个园区,并将园区通过mountGarden
将园区挂载到容器中
需要注意,在挂载园区之前,我们必须要挂载一个摄像机
自定义摄像机
框架默认挂载的是透视摄像机,如果你希望使用其它摄像机,那么在构建摄像机后,通过mountCamera
传入摄像机即可
控制方式
容器默认采用的是单模型控制器,如果你的三维场景是有多个模型构成的类似一个区域,那么采用它虽然没问题,但是用户可以将其旋转、拖拉到下方,就观感上是比较违和的,那么你可以调整容器的控制器为场景控制器
默认控制器
框架内置两种控制器,默认为模型控制,也可以切换为场景控制器,现在可以尝试旋转、平移,看看他们的区别
自定义控制器
你也可以为容器添加自定义控制器,下述案例是为场景添加飞行控制器的效果(注意:如果使用自定义控制器,那么部分容器提供的API将会失效,详细请查看下方API说明)
贴图动画
可以给场景中的模型添加贴图动画,使园区效果更加生动
定点贴图
可以给场景中的模型,根据指定坐标点,进行贴图(需要保证提供的坐标点是在模型上的)
视角飞行 0.0.28
平滑的过渡摄像机的运行过程,需要注意,该方法仅适用于挂载的是默认相机
Options
属性名 | 说明 | 类型 |
---|---|---|
element | 视图容器 | HTMLElement |
width | 容器宽度(构造函数执行时,默认使用element的宽度,后续可通过resize 方法更改) | EffectComposer |
height | 容器高度(构造函数执行时,默认使用element的高度,后续可通过resize 方法更改) | number |
renderer | 渲染器 | RTHREE.WebGLRenderer |
physics | 物理引擎实例对象 | Physics |
control | 内置控制器 | Control |
camera | 摄像机 | RTHREE.Camera |
garden | 当前挂载的园区 | ABaseGarden |
IRBIMConstructorOption
属性名 | 说明 | 类型 | 默认值 |
---|---|---|---|
antialias | 是否开启MSAA抗锯齿(如果使用了后期通道,该属性将失效,需手动添加抗锯齿通道) | boolean | true |
performance | 是否开启性能优化(如果开启,那么视图不会一直渲染,减少CPU以及GPU开销) | boolean | true |
toneMaping | 色调映射类型 | RTHREE.ToneMapping | RTHREE.ACESFilmicToneMapping |
hightPerformance | 是否开启高性能渲染 | boolean | default |
logarithmicDepthBuffer | 是否开启深度检测(若开启,antialias 属性将失效) | boolean | false |
autoLoop | 是否自动循环 | boolean | true |
IControlConstructorOption
属性名 | 说明 | 类型 | 默认值 |
---|---|---|---|
type | 控制方式 | EControlType | SINGLE |
enabled | 是否允许控制操作 | boolean | true |
enablePan | 启用平移 | boolean | true |
enableRotate | 启用旋转 | boolean | true |
enableZoom | 启用缩放 | boolean | true |
rotateSpeed | 旋转速度 | number | 0.6 |
zoomSpeed | 缩放速度 | number | 0.6 |
panSpeed | 平移速度 | number | 0.6 |
enableDamping | 启用阻尼效果 | boolean | true |
dampingFactor | 阻尼参数 | number | 0.05 |
minDistance | 相机距离原点的最近距离 | number | 4 |
maxDistance | 相机距离原点的最远距离 | number | 800 |
minPolarAngle | 相机最小极角 | number | 0 |
maxPolarAngle | 相机最大极角 | number | Math.PI |
minAzimuthAngle | 相机最小方位角 | number | Infinity |
maxAzimuthAngle | 相机最大方位角 | number | Infinity |
EControlType
枚举值 | 说明 |
---|---|
SINGLE | 单个物体观看 |
SCENE | 场景控制 |
Methods
mountCamera(camera?: Camera)
将摄像机挂载到容器中,如果不传参,则将挂载默认的摄像机
mountControl(options?: IControlConstructorOption)
挂载框架内置的控制器,在执行该方法前,请先挂载摄像机
mountGarden(garden: ABaseGarden, oldCamera = true)
garden,基于
ABaseGarden
构建的园区类实例oldCamera,是否切换到指定园区时,摄像机恢复至该摄像机上次隐藏时的位置(如果为false,那么如果该园区在show生命周期函数中有设置摄像机的位置,那么会以该位置进行展示,如果没有设置生命周期函数,那么将保持上个园区的摄像机位置)
将指定园区挂载到容器中进行渲染
mountEvent()
挂载内置的交互逻辑
mountHelper()
挂载内置的辅助线,在执行该方法前,请先挂载摄像机
mountStats()
挂载性能监视器
mountSelectionBox()
挂载框选模块,需要注意,在执行该方法前,请先挂载摄像机且框选功能需要挂载内置的交互逻辑才可生效,你可以使用openSelect
方法开启框选,stopSelect
方法关闭框选
mountRenderBefore()
框架已内置动画循环器,如果你希望在每帧动画开始前执行一些逻辑,可以使用该方法挂载一个逻辑
mountRenderAfter()
框架已内置动画循环器,如果你希望在每帧动画结束后执行一些逻辑,可以使用该方法挂载一个逻辑
refreshViewer(number?: number)
number:控制停止视图刷新的延迟时间,默认值为
160ms
刷新视图(如果关闭了性能优化,无需调用该方法)
container.refreshViewer(320);
getAngleView
获取当前的视角数据(数值常用于cameraFlyTo
或cameraTo
函数)
注意改方法仅适用于挂载的是默认的控制器
container.getAngleView();
addTextureAnimation(option: ITextureAnimationOption)
添加材质贴图动画
ITextureAnimationOption
继承自 ITextureAnimationBaseOption
属性名 | 说明 | 类型 |
---|---|---|
mesh | 网格模型 | THREE.Mesh |
textureCode | 贴图属性 | string |
reverse | 是否逆向 | boolean |
speed | 速度 | number |
property | 属性 | 'x' |'y' |
updateTextureAnimation(uuid: string, ITextureAnimationBaseOption)
修改材质贴图动画参数 ITextureAnimationBaseOption
属性名 | 说明 | 类型 |
---|---|---|
textureCode | 贴图属性 | string |
reverse | 是否逆向 | boolean |
speed | 速度 | number |
property | 属性 | 'x' |'y' |
removeTextureAnimation(uuid: string)
移除材质贴图动画
resize(width?: number, height?: number)
width:视图宽度(不传则默认为容器的宽度)
height:视图高度(不传则默认为容器的高度)
视图尺寸修正(当你的窗口发生变化时,请调用一下它)
document.addEventListener('resize',function() {
container.resize();
});
cameraFlyTo(position: number[],center: number[],duration?: number,flyEnd?: Function)
position:摄像机坐标
center:控制器旋转中心
duration:飞行总时长(不传则默认为1)
flyEnd
:飞行结束回调函数
摄像机平滑飞行至指定位置,在执行该方法前,请先挂载摄像机且只适用于默认控制器
container.cameraFlyTo(
[-0.08607427452609506, 1.2364727884671887, 3.1433645676977213],
[0.17421238614783044, 0.6579253807368004, -0.10327474981833781],
2
);
cameraTo(position: number[],center: number[])
position:摄像机坐标
center:控制器旋转中心(如果挂载的是自定义控制器,可以不传该参数,如果你定义的控制器有旋转中心,请自行设置旋转中心)
摄像机设定至是定位置,在执行该方法前,请先挂载摄像机
container.cameraTo(
[-0.08607427452609506, 1.2364727884671887, 3.1433645676977213],
[0.17421238614783044, 0.6579253807368004, -0.10327474981833781],
);
getDirectionToObjectByPosition(position: RTHREE.Vector3,object: RTHREE.Object3D)
获取指定坐标位于模型的方位(该方法的适用场景见上述定点贴图)