Skip to content

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抗锯齿(如果使用了后期通道,该属性将失效,需手动添加抗锯齿通道)booleantrue
performance是否开启性能优化(如果开启,那么视图不会一直渲染,减少CPU以及GPU开销)booleantrue
toneMaping色调映射类型RTHREE.ToneMappingRTHREE.ACESFilmicToneMapping
hightPerformance是否开启高性能渲染booleandefault
logarithmicDepthBuffer是否开启深度检测(若开启,antialias属性将失效)booleanfalse
autoLoop是否自动循环booleantrue

IControlConstructorOption

属性名说明类型默认值
type控制方式EControlTypeSINGLE
enabled是否允许控制操作booleantrue
enablePan启用平移booleantrue
enableRotate启用旋转booleantrue
enableZoom启用缩放booleantrue
rotateSpeed旋转速度number0.6
zoomSpeed缩放速度number0.6
panSpeed平移速度number0.6
enableDamping启用阻尼效果booleantrue
dampingFactor阻尼参数number0.05
minDistance相机距离原点的最近距离number4
maxDistance相机距离原点的最远距离number800
minPolarAngle相机最小极角number0
maxPolarAngle相机最大极角numberMath.PI
minAzimuthAngle相机最小方位角numberInfinity
maxAzimuthAngle相机最大方位角numberInfinity

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

刷新视图(如果关闭了性能优化,无需调用该方法)

typescript
container.refreshViewer(320);

getAngleView

获取当前的视角数据(数值常用于cameraFlyTocameraTo函数)

注意改方法仅适用于挂载的是默认的控制器

typescript
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:视图高度(不传则默认为容器的高度)

视图尺寸修正(当你的窗口发生变化时,请调用一下它)

typescript
document.addEventListener('resize',function() {
    container.resize();
});

cameraFlyTo(position: number[],center: number[],duration?: number,flyEnd?: Function)

position:摄像机坐标

center:控制器旋转中心

duration:飞行总时长(不传则默认为1)

flyEnd:飞行结束回调函数

摄像机平滑飞行至指定位置,在执行该方法前,请先挂载摄像机且只适用于默认控制器

typescript
container.cameraFlyTo(
    [-0.08607427452609506, 1.2364727884671887, 3.1433645676977213],
    [0.17421238614783044, 0.6579253807368004, -0.10327474981833781],
    2
);

cameraTo(position: number[],center: number[])

position:摄像机坐标

center:控制器旋转中心(如果挂载的是自定义控制器,可以不传该参数,如果你定义的控制器有旋转中心,请自行设置旋转中心)

摄像机设定至是定位置,在执行该方法前,请先挂载摄像机

typescript
container.cameraTo(
    [-0.08607427452609506, 1.2364727884671887, 3.1433645676977213],
    [0.17421238614783044, 0.6579253807368004, -0.10327474981833781],
);

getDirectionToObjectByPosition(position: RTHREE.Vector3,object: RTHREE.Object3D)

获取指定坐标位于模型的方位(该方法的适用场景见上述定点贴图)