如视 VR Web展示器

// 初始化构造函数
const five = new Five();
// 将绘制区域添加到页面上
five.appendTo(document.body);
// 加载 Work 数据
five.load({...});

Hierarchy (view full)

Constructors

Properties

backgroundAlpha: number

背景透明度

backgroundColor: Color

背景颜色

camera: Camera

内部使用的 Camera

currentMode: Mode

当前展示的模式

enableLayeringRendering: boolean
ident: string
imageOptions: ImageOptions

全景图的配置参数

可以动态对配置在 work 数据中的全景图片在 runtime 做 url 调整。 平衡加载时间和图片质量

modelScene: ModelScene

内部模型部分使用的 THREE.Scene

modelSceneNeedsRender: boolean

模型是否需要更新渲染

可以设置modelNeedsRender为true,通知five进行模型渲染的更新

needsRender: boolean

是否需要渲染

如果初始化设置了 onlyRenderIfNeeds: true, 则会激活按需渲染 可以通过设置 five.needsRender = true 来告知,five 会在下一帧渲染画面。

onlyRenderIfNeeds: boolean

是否按需渲染

pano: Pano

当前点位序号

paused: boolean

自动播放状态是否暂停

可以通过 five.play five.pause 方法播放或暂停

plugins: {
    [key: string]: FivePluginInstance<any>;
}

插件暴露的方法

poweredByRealsee: boolean

是否显示 Powered By Realsee

renderer?: WebGLRenderer

当前使用的 THREE.WebGLRenderer。

如果初始化时传入了 renderer 则直接时该值 否则会通过 preserveDrawingBuffer backgroundColor backgroundAlpha antialias 创建一个 THREE.WebGLRenderer

scene: Scene

非模型部分使用的 THREE.Scene

state: State

当前状态

five 设置了以下状态

- mode: Mode
- panoIndex: number
- longitude: number
- latitude: number
- fov: number
- offset: THREE.Vector3

可以通过 five.state 和 five.setState 来获取和设置。
通过 state 设置后,five 会通过合适的动画运动来达到设置的位置。
来迎合一些通过数据驱动的场景。
textureOptions: TextureOptions

模型贴图的配置参数

可以动态对配置在 work 数据中的模型贴图在 runtime 做 url 调整。 平衡加载时间和图片质量

videoTexture: VideoTexture

模型贴图的配置参数

可以动态对配置在 work 数据中的模型贴图在 runtime 做 url 调整。 平衡加载时间和图片质量

viewport: Viewport

当前设置的 viewport

可通过初始化,或者 setScissor 方式设置 viewport 是将屏幕中的内容渲染到 renderer 的指定区域。 页面整体长宽均为 1。通过类似 css 的 left bottom width height 来确定区域。

viewport: { left: 0.75, bottom: 0, width: 0.25, height: 1 }
xrCustomObjectsScene: Scene

供外部放置需要在xr场景下产生遮挡的物体们

Mode: {
    Floorplan: "Floorplan";
    Mapview: "Mapview";
    Model: "Model";
    Panorama: "Panorama";
    Topview: "Topview";
    VRPanorama: "VRPanorama";
    XRPanorama: "XRPanorama";
} = ...

Five 的显示模式,可以通过 five.changeMode five.setState 来切换

Panorama 全景图游走模式
Model 模型游走模式
Floorplan 模型查看模式
Topview 户型图模式
VRPanorama VR眼镜模式
XRPanorama VR硬件模式

Accessors

  • get enableEDL(): boolean
  • Returns boolean

    use five.effect instead

  • set enableEDL(enable): void
  • Parameters

    • enable: boolean

    Returns void

  • get enableHQ(): boolean
  • Returns boolean

    use five.effect instead

  • set enableHQ(enable): void
  • Parameters

    • enable: boolean

    Returns void

  • get enableIOSEDR(): boolean
  • Returns boolean

    use five.effect instead

  • set enableIOSEDR(enable): void
  • Parameters

    • enable: boolean

    Returns void

  • get enablePostProcessing(): boolean
  • Returns boolean

    use five.effect instead

  • set enablePostProcessing(enable): void
  • Parameters

    • enable: boolean

    Returns void

  • get helperVisible(): boolean
  • 帮助元素显示/隐藏

    Returns boolean

  • set helperVisible(visible): void
  • Parameters

    • visible: boolean

    Returns void

  • get internalLightsEnabled(): boolean
  • Returns boolean

  • set internalLightsEnabled(value): void
  • Parameters

    • value: boolean

    Returns void

  • get model(): Model
  • Returns Model

  • get models(): Models
  • Returns Models

  • get panoIndex(): number
  • Returns number

  • get renderEffect():
        | "default"
        | "edl"
        | "hq"
        | "luminance"
  • Returns
        | "default"
        | "edl"
        | "hq"
        | "luminance"

  • set renderEffect(value): void
  • Parameters

    • value:
          | "default"
          | "edl"
          | "hq"
          | "luminance"

    Returns void

  • get scissor(): Viewport
  • Returns Viewport

    use Viewport instead.

  • get work(): Work
  • Returns Work

  • get works(): Works
  • 当前加载的 work 数据

    Returns Works

  • get dracoPath(): string
  • Returns string

  • set dracoPath(path): void
  • Parameters

    • path: string

    Returns void

  • get ktx2Path(): string
  • Returns string

  • set ktx2Path(path): void
  • Parameters

    • path: string

    Returns void

  • get version(): string
  • Returns string

Methods

  • 绑定一个额外 DOM 区域,接受触控/鼠标事件

    Parameters

    • element: HTMLElement

    Returns (() => void)

    解除该绑定

      • (): void
      • Returns void

  • 将显示区域加载到页面 DOM 中

    Parameters

    • element: HTMLElement

      加载到页面的 DOM 元素

    • size: {
          height?: number;
          width?: number;
      } = {}

      显示区域尺寸 默认铺满这个 DOM 元素

      • Optionalheight?: number
      • Optionalwidth?: number

    Returns void

    如果你是传入的 renderer. 则你需要自行来方式显示区域该方法并不生效

  • 切换模态

    Type Parameters

    Parameters

    • mode: T

      切换到的模态

    • state: Partial<Omit<State, "mode">> = {}

      切换完成时的姿态

    • Optionaloptions: number | {
          duration?: number;
          effect?: MovePanoEffect;
      }

      模态切换动画用时

    • userAction: boolean = true

      是否时用户动作触发 默认 true

    • force: boolean = false

      必须重新初始化 controller

    Returns Promise<void>

  • 析构 five 对象。

    Returns void

    一旦调用了析构方法,则不能再使用当前 five 对象了。 你可以新建一个新的。

  • 触发事件

    Type Parameters

    • K extends
          | "dispose"
          | "error"
          | "render"
          | "gesture.pan"
          | "gesture.tap"
          | "gesture.dbltap"
          | "gesture.press"
          | "gesture.pinch"
          | "gesture.mousewheel"
          | "gesture.mousemove"
          | "gesture.momentum"
          | "initAnimation.start"
          | "initAnimation.end"
          | "camera.update"
          | "intersect.update"
          | "pano.select"
          | "pano.request"
          | "pano.moveTo"
          | "pano.moving"
          | "pano.arrived"
          | "pano.cancel"
          | "pano.error"
          | "pano.texture.load"
          | "pano.texture.progress"
          | "pano.texture.success"
          | "pano.texture.error"
          | "pano.texture.abort"
          | "xr.session.end"
          | "xr.session.start"
          | "xr.gesture.tap"
          | "xr.gesture.press"
          | "xr.gesture.buttonUp"
          | "xr.gesture.buttonDown"
          | "xr.controller.update"
          | (keyof LegacyEventType)
          | "works.request"
          | "works.load"
          | "works.ready"
          | "state.set"
          | "state.change"
          | "state.synced"
          | "currentState.change"
          | "model.request"
          | "model.load"
          | "model.error"
          | "model.changeShownFloor"
          | "models.load"
          | "models.refined"
          | "render.prepare"
          | "mode.change.request"
          | "mode.change"
          | "helpers.visible"
          | "network.resource"
          | "fps"

      预设的监听事件名称

    Parameters

    • name: K

      事件类型

    • Rest...data: Parameters<EventTypes[K]>

      触发事件的数据

    Returns boolean

    canceled 是否被触发取消

  • 退出全屏

    Returns void

  • 获取当前相机的姿态(用于内部的 python 脚本截图)

    Returns {
        lookAtVector: Vector3;
        phi: number;
        theta: number;
    }

    • lookAtVector: Vector3
    • phi: number
    • theta: number

    这是用于内部的 python 脚本截图

  • Returns State

  • Parameters

    • target: Vector2

    Returns Vector2

  • 获取显示用的画布(Canvas DOM节点)

    Returns HTMLCanvasElement

  • 获取当前相机经纬度

    Returns Pick<Pose, "longitude" | "latitude">

    请使用使用 getPose

  • 获取当前相机位置

    Returns Vector3

    请使用使用 getPose

  • 获取画面中的像素颜色

    Type Parameters

    • T extends Uint8Array | Uint8ClampedArray = Uint8Array

    Parameters

    • x: number

      获取像素区域的起始坐标 x

    • y: number

      获取像素区域的起始坐标 y

    • width: number

      获取像素区域的宽度

    • height: number

      获取像素区域的高度

    • OptionalpixelRatio: number

      获取区域的像素比

    • OptionalflipY: boolean

      是否Y轴翻转

    • Optionalbuffer: T

      存储数组

    Returns T

    rgba颜色平铺的 Uint8Array

  • 获取画面中的像素颜色

    Type Parameters

    • T extends Uint8Array | Uint8ClampedArray = Uint8Array

    Parameters

    • options: {
          buffer?: T;
          flipY?: boolean;
          height: number;
          helperVisible?: boolean;
          pixelRatio?: number;
          skipPanorama?: boolean;
          width: number;
          x: number;
          y: number;
      }

      参数

      • Optionalbuffer?: T

        存储数组

      • OptionalflipY?: boolean

        是否Y轴翻转

      • height: number

        获取像素区域的高度

      • OptionalhelperVisible?: boolean
      • OptionalpixelRatio?: number

        获取区域的像素比

      • OptionalskipPanorama?: boolean
      • width: number

        获取像素区域的宽度

      • x: number

        获取像素区域的起始坐标 x

      • y: number

        获取像素区域的起始坐标 y

    Returns T

  • Returns Pose

    获取当前相机姿态, 可以使用 getCurrentState 代替

  • Parameters

    • target: Vector2

    Returns Vector2

  • 判断是否注册了事件

    Parameters

    • name:
          | "dispose"
          | "error"
          | "render"
          | "gesture.pan"
          | "gesture.tap"
          | "gesture.dbltap"
          | "gesture.press"
          | "gesture.pinch"
          | "gesture.mousewheel"
          | "gesture.mousemove"
          | "gesture.momentum"
          | "initAnimation.start"
          | "initAnimation.end"
          | "camera.update"
          | "intersect.update"
          | "pano.select"
          | "pano.request"
          | "pano.moveTo"
          | "pano.moving"
          | "pano.arrived"
          | "pano.cancel"
          | "pano.error"
          | "pano.texture.load"
          | "pano.texture.progress"
          | "pano.texture.success"
          | "pano.texture.error"
          | "pano.texture.abort"
          | "xr.session.end"
          | "xr.session.start"
          | "xr.gesture.tap"
          | "xr.gesture.press"
          | "xr.gesture.buttonUp"
          | "xr.gesture.buttonDown"
          | "xr.controller.update"
          | (keyof LegacyEventType)
          | "works.request"
          | "works.load"
          | "works.ready"
          | "state.set"
          | "state.change"
          | "state.synced"
          | "currentState.change"
          | "model.request"
          | "model.load"
          | "model.error"
          | "model.changeShownFloor"
          | "models.load"
          | "models.refined"
          | "render.prepare"
          | "mode.change.request"
          | "mode.change"
          | "helpers.visible"
          | "network.resource"
          | "fps"

      事件类型

    Returns boolean

  • 加载 Work 数据

    Parameters

    • inputWork:
          | string
          | string[]
          | LooseWork
          | Work
          | Work[]
          | LooseWork[]
          | LooseWorkWithExtrinsics[]
          | Promise<
              | LooseWork
              | Work
              | Work[]
              | LooseWork[]
              | LooseWorkWithExtrinsics[]>

      Work 数据

    • Optionalstate: "initial" | Partial<State> | "inherit"

      初始化姿态

      • "inherit" 使用当前姿态
      • "initial" 使用 Work 数据中的 initial 姿态
      • State 自定义姿态
    • Optionaloptions: number | FiveLoadOptions

      切换时间, 切换效果

    • userAction: boolean = true

    Returns Promise<void>

  • 转化到 Panorama 模态,并移动到对应序号的观察点。

    Parameters

    • pano: number | Pano | `${string}[${number}]`

      观察点序号

    • options: MovePanoOptions = {}

      移动点位参数

    • userAction: boolean = true

      是否用户触犯

    Returns Promise<void>

  • 解除事件

    如果 name 不传的话解除对应所有事件 如果 name, callback 不传的话解除所有name的所有事件

    Type Parameters

    • K extends
          | "dispose"
          | "error"
          | "render"
          | "gesture.pan"
          | "gesture.tap"
          | "gesture.dbltap"
          | "gesture.press"
          | "gesture.pinch"
          | "gesture.mousewheel"
          | "gesture.mousemove"
          | "gesture.momentum"
          | "initAnimation.start"
          | "initAnimation.end"
          | "camera.update"
          | "intersect.update"
          | "pano.select"
          | "pano.request"
          | "pano.moveTo"
          | "pano.moving"
          | "pano.arrived"
          | "pano.cancel"
          | "pano.error"
          | "pano.texture.load"
          | "pano.texture.progress"
          | "pano.texture.success"
          | "pano.texture.error"
          | "pano.texture.abort"
          | "xr.session.end"
          | "xr.session.start"
          | "xr.gesture.tap"
          | "xr.gesture.press"
          | "xr.gesture.buttonUp"
          | "xr.gesture.buttonDown"
          | "xr.controller.update"
          | (keyof LegacyEventType)
          | "works.request"
          | "works.load"
          | "works.ready"
          | "state.set"
          | "state.change"
          | "state.synced"
          | "currentState.change"
          | "model.request"
          | "model.load"
          | "model.error"
          | "model.changeShownFloor"
          | "models.load"
          | "models.refined"
          | "render.prepare"
          | "mode.change.request"
          | "mode.change"
          | "helpers.visible"
          | "network.resource"
          | "fps"

      预设的监听事件名称

    Parameters

    Returns void

  • 注册事件

    Type Parameters

    • K extends
          | "dispose"
          | "error"
          | "render"
          | "gesture.pan"
          | "gesture.tap"
          | "gesture.dbltap"
          | "gesture.press"
          | "gesture.pinch"
          | "gesture.mousewheel"
          | "gesture.mousemove"
          | "gesture.momentum"
          | "initAnimation.start"
          | "initAnimation.end"
          | "camera.update"
          | "intersect.update"
          | "pano.select"
          | "pano.request"
          | "pano.moveTo"
          | "pano.moving"
          | "pano.arrived"
          | "pano.cancel"
          | "pano.error"
          | "pano.texture.load"
          | "pano.texture.progress"
          | "pano.texture.success"
          | "pano.texture.error"
          | "pano.texture.abort"
          | "xr.session.end"
          | "xr.session.start"
          | "xr.gesture.tap"
          | "xr.gesture.press"
          | "xr.gesture.buttonUp"
          | "xr.gesture.buttonDown"
          | "xr.controller.update"
          | (keyof LegacyEventType)
          | "works.request"
          | "works.load"
          | "works.ready"
          | "state.set"
          | "state.change"
          | "state.synced"
          | "currentState.change"
          | "model.request"
          | "model.load"
          | "model.error"
          | "model.changeShownFloor"
          | "models.load"
          | "models.refined"
          | "render.prepare"
          | "mode.change.request"
          | "mode.change"
          | "helpers.visible"
          | "network.resource"
          | "fps"

      预设的监听事件名称

    Parameters

    Returns (() => void)

    解除事件

      • (): void
      • Returns void

  • 注册事件(是否只执行一次)

    Type Parameters

    • K extends
          | "dispose"
          | "error"
          | "render"
          | "gesture.pan"
          | "gesture.tap"
          | "gesture.dbltap"
          | "gesture.press"
          | "gesture.pinch"
          | "gesture.mousewheel"
          | "gesture.mousemove"
          | "gesture.momentum"
          | "initAnimation.start"
          | "initAnimation.end"
          | "camera.update"
          | "intersect.update"
          | "pano.select"
          | "pano.request"
          | "pano.moveTo"
          | "pano.moving"
          | "pano.arrived"
          | "pano.cancel"
          | "pano.error"
          | "pano.texture.load"
          | "pano.texture.progress"
          | "pano.texture.success"
          | "pano.texture.error"
          | "pano.texture.abort"
          | "xr.session.end"
          | "xr.session.start"
          | "xr.gesture.tap"
          | "xr.gesture.press"
          | "xr.gesture.buttonUp"
          | "xr.gesture.buttonDown"
          | "xr.controller.update"
          | (keyof LegacyEventType)
          | "works.request"
          | "works.load"
          | "works.ready"
          | "state.set"
          | "state.change"
          | "state.synced"
          | "currentState.change"
          | "model.request"
          | "model.load"
          | "model.error"
          | "model.changeShownFloor"
          | "models.load"
          | "models.refined"
          | "render.prepare"
          | "mode.change.request"
          | "mode.change"
          | "helpers.visible"
          | "network.resource"
          | "fps"

      预设的监听事件名称

    Parameters

    Returns (() => void)

    解除事件

      • (): void
      • Returns void

  • 暂停自动播放

    Returns void

  • Returns void

  • 预加载点位图片资源

    Parameters

    • pano: number | Pano | `${string}[${number}]`

      观察点序号

    • callback: ((costs: number) => void) = noop

      加载完成回调, 并传递加载用时。

        • (costs): void
        • Parameters

          • costs: number

          Returns void

    Returns Promise<number>

    加载完成的 Promise 参数同 callback

  • 计算三维坐标对应到屏幕的二维坐标

    Parameters

    • vector: Vector3

      三维坐标

    • testModel: boolean = false

      是否计算模型遮挡

    Returns Vector2

    二维坐标 或者 null

    如果三维坐标不在屏幕中,则返回 null

  • 当前页面静态

    Parameters

    • args: {
          tile?: boolean;
      } = {}
      • Optionaltile?: boolean

    Returns Promise<void>

  • 设置显示区域尺寸

    Parameters

    • size: {
          height?: number;
          width?: number;
      } = {}

      显示区域尺寸 默认铺满这个 DOM 元素

      • Optionalheight?: number
      • Optionalwidth?: number
    • OptionalpixelRatio: number

      像素比 默认继承之前的设置

    Returns void

    如果你是传入的 renderer. 则你需要自行来设置显示区域尺寸,该方法并不生效

  • 解除绑定的一个额外 DOM 区域

    Parameters

    • element: HTMLElement

    Returns void

  • 强制渲染

    Parameters

    • Optionalcallback: (() => void)

      渲染完成回调

        • (): void
        • Returns void

    Returns void

    调用 five.render() 和设置 five.needsRender = true 均可在按需渲染时,使得画面渲染一次 区别在于:

    • five.needsRender = true 为在下帧渲染画面
    • five.render() 在当前帧渲染画面 推荐使用 five.needsRender = true, 可以更加流畅。但是如果需要截图等同步操作,可以使用 five.render()
  • 请求全屏

    Returns void

  • Returns Promise<void>

  • Returns Promise<void>

  • Parameters

    Returns void

    use setViewport instead.

  • 设置 State

    Parameters

    • state: Partial<State>

      目标状态

    • immediately: boolean = false

      是否马上转换,马上转换会尽快达到目标状态,尽量减少中间状态,更少动画。

    • userAction: boolean = true

      是否是用户触发的动作

    Returns void

    five 设置了以下状态
    
    - mode: Mode
    - panoIndex: number
    - longitude: number
    - latitude: number
    - fov: number
    - offset: THREE.Vector3
    
    可以通过 five.state 和 five.setState 来获取和设置。
    通过 state 设置后,five 会通过合适的动画运动来达到设置的位置。
    来迎合一些通过数据驱动的场景。
    
  • 设置 viewport

    Parameters

    • viewport: Viewport

      指定区域 scissor 是将屏幕中的内容渲染到 renderer 的指定区域。 请确保在 five 初始化时传入 renderer 对象 页面整体长宽均为 1。通过类似 css 的 left bottom width height 来确定区域。

    Returns void

    five.setViewport({ left: 0.75, bottom: 0, width: 0.25, height: 1 })
    
  • 移动相机。(不触发点位移动)

    Parameters

    • pose: Partial<Pose>

      相机目标位置

    • duration: number

      动画触发的时常

    • userAction: boolean = true

      是否用户触发

    Returns Promise<void>

    Promise 是否移动成功

    如果动画中途被打断(用户触发行为,或者调用 setState, load, changeMode)的等 会 Promise.reject。运动完成则 Promise.resolve

  • 通过帧动画移动相机。(不触发点位移动)

    Parameters

    • keyframes: {
          key?: string;
          progress: number;
          value: Pose;
      }[]

      动画帧

    • duration: number

      动画触发的时常

    • userAction: boolean = true

      是否用户触发

    Returns Promise<void>

    Promise 是否移动成功

    如果动画中途被打断(用户触发行为,或者调用 setState, load, changeMode)的等 会 Promise.reject。运动完成则 Promise.resolve

  • Parameters

    • args: Pick<FiveInitArgs,
          | "model"
          | "panorama"
          | "textureOptions"
          | "imageOptions"
          | "floorplan"
          | "topview"
          | "mapview"
          | "vrPanorama">
    • refresh: boolean = true

    Returns void

  • Parameters

    • time: number
    • deltaTime: number
    • Rest...args: any[]

    Returns void

  • 等待事件

    Type Parameters

    • K extends
          | "dispose"
          | "error"
          | "render"
          | "gesture.pan"
          | "gesture.tap"
          | "gesture.dbltap"
          | "gesture.press"
          | "gesture.pinch"
          | "gesture.mousewheel"
          | "gesture.mousemove"
          | "gesture.momentum"
          | "initAnimation.start"
          | "initAnimation.end"
          | "camera.update"
          | "intersect.update"
          | "pano.select"
          | "pano.request"
          | "pano.moveTo"
          | "pano.moving"
          | "pano.arrived"
          | "pano.cancel"
          | "pano.error"
          | "pano.texture.load"
          | "pano.texture.progress"
          | "pano.texture.success"
          | "pano.texture.error"
          | "pano.texture.abort"
          | "xr.session.end"
          | "xr.session.start"
          | "xr.gesture.tap"
          | "xr.gesture.press"
          | "xr.gesture.buttonUp"
          | "xr.gesture.buttonDown"
          | "xr.controller.update"
          | (keyof LegacyEventType)
          | "works.request"
          | "works.load"
          | "works.ready"
          | "state.set"
          | "state.change"
          | "state.synced"
          | "currentState.change"
          | "model.request"
          | "model.load"
          | "model.error"
          | "model.changeShownFloor"
          | "models.load"
          | "models.refined"
          | "render.prepare"
          | "mode.change.request"
          | "mode.change"
          | "helpers.visible"
          | "network.resource"
          | "fps"

      预设的监听事件名称

    Parameters

    • name: K

      事件类型

    • Optionalfilter: ((...args: Parameters<EventTypes[K]>) => boolean | void)

      事件类型

        • (...args): boolean | void
        • Parameters

          Returns boolean | void

    Returns Promise<Parameters<EventTypes[K]>>

    触发事件的数据