如视 VR Web展示器

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

Hierarchy (view full)

Constructors

Properties

camera: Camera

内部使用的 Camera

currentMode: Mode

当前展示的模式

ident: string
imageOptions: ImageOptions

全景图的配置参数

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

info: {
    memory: {
        geometries: number;
        textures: number;
    };
    render: {
        calls: number;
        frame: number;
        lines: number;
        points: number;
        triangles: number;
    };
}
modelRenderTarget: WebGLRenderTarget

模型渲染缓冲

modelScene: Scene

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

modelSceneNeedsRender: boolean

模型是否需要更新渲染

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

models: Models

当前加载的模型

needsRender: boolean

是否需要渲染

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

pano: Pano

当前点位序号

paused: boolean

自动播放状态是否暂停

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

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

插件暴露的方法

renderer?: WebGLRenderer

当前使用的 THREE.WebGLRenderer。

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

scene: Scene

非模型部分使用的 THREE.Scene

scissor: Scissor

当前设置的 scissor

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

scissor: { left: 0.75, bottom: 0, width: 0.25, height: 1 }
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 调整。 平衡加载时间和图片质量

xrCustomObjectsScene: Scene

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

Line: any = null

请使用 import { Line } from "@realsee/five/line" 代替;

Mode: Mirror<Mode> = ...

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

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

Accessors

  • get enableEDL(): boolean
  • 是否开启EDL模式

    Returns boolean

  • set enableEDL(enable): void
  • Parameters

    • enable: boolean

    Returns void

  • get enableHQ(): boolean
  • Returns boolean

  • set enableHQ(enable): void
  • Parameters

    • enable: boolean

    Returns void

  • get enableIOSEDR(): boolean
  • 是否开启 IOS EDR 模式 需要客户端配合 并且开启 five.enablepostProcessing = true

    Returns boolean

  • set enableIOSEDR(enable): void
  • Parameters

    • enable: boolean

    Returns void

  • get enablePostProcessing(): boolean
  • 是否开启后处理

    Returns boolean

  • set enablePostProcessing(enable): void
  • Parameters

    • enable: boolean

    Returns void

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

    Returns boolean

  • set helperVisible(visible): void
  • Parameters

    • visible: boolean

    Returns void

  • get model(): Model
  • Returns Model

  • get panoIndex(): number
  • Returns number

  • 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. 则你需要自行来方式显示区域该方法并不生效

  • Parameters

    • callback: (() => void)
        • (): void
        • Returns void

    Returns void

  • 切换模态

    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
          | "error"
          | "dispose"
          | "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"
          | "render"
          | "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

  • GPU Picking 获取选中的 mesh

    Parameters

    • x: number

      屏幕坐标 x

    • y: number

      屏幕坐标 y

    • colorMap: {
          [key: string]: THREE.Color;
      }

      需要选取的 mesh 的颜色与 uuid 的映射

      • [key: string]: THREE.Color
    • pixelRatio: number = 1
    • color: Vector3 = ...

      指定的模型颜色

    Returns string | false

    选中 mesh 的 uuid

  • 获取当前相机经纬度

    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

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

    Returns Pose

  • 获取当前在屏幕视锥中的 mesh。

    Parameters

    • Optionalobject: Object3D

      如果传入则检查这个对象中的mesh,如果不传,则检查整个 scene

    Returns Object3D[]

  • Parameters

    • target: Vector2

    Returns Vector2

  • 暂时通过这个函数获取所有 work 中的数据

    Parameters

    Returns Promise<{
        type: string;
        url: string;
    }[]>

  • 判断是否注册了事件

    Parameters

    • name:
          | "error"
          | "dispose"
          | "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"
          | "render"
          | "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
          | "error"
          | "dispose"
          | "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"
          | "render"
          | "mode.change.request"
          | "mode.change"
          | "helpers.visible"
          | "network.resource"
          | "fps"

      预设的监听事件名称

    Parameters

    Returns void

  • 注册事件

    Type Parameters

    • K extends
          | "error"
          | "dispose"
          | "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"
          | "render"
          | "mode.change.request"
          | "mode.change"
          | "helpers.visible"
          | "network.resource"
          | "fps"

      预设的监听事件名称

    Parameters

    Returns (() => void)

    解除事件

      • (): void
      • Returns void

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

    Type Parameters

    • K extends
          | "error"
          | "dispose"
          | "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"
          | "render"
          | "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

    • updateObjectResolution: boolean = false

    Returns any

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

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

    Returns void

  • Returns Promise<void>

  • Returns Promise<void>

  • 设置 scissor

    Parameters

    • scissor: Scissor

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

    Returns void

    five.setScissor({ left: 0.75, bottom: 0, width: 0.25, height: 1 })
    
  • 设置 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 会通过合适的动画运动来达到设置的位置。
    来迎合一些通过数据驱动的场景。
    
  • 移动相机。(不触发点位移动)

    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
          | "error"
          | "dispose"
          | "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"
          | "render"
          | "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]>>

    触发事件的数据