EventDispatcher

App

App类可以更轻松地设置3D应用程序。它包括初始化WebGL渲染器的代码、加载glTF场景、自动播放动画以及基本相机控制器的逻辑。

示例

// loaded GLTF 2.0 asset var url = 'template.gltf'; // construct a new application with simple rotating preloader var app = new v3d.App('v3d-container', null, new v3d.SimplePreloader({ container: 'v3d-container' })); // load main scene app.loadScene(url, function() { app.enableControls(); app.run(); runCode(); }); function runCode() { // place your own code here }

构造函数

App(container, ctxSettings, preloader)

container - html元素的id或包含画布的html元素本身。
ctxSettings - 在canvas.getContext()方法中传递的WebGL上下文属性。
preloader - 应用程序Preloader类的实例。

这个构造函数做以下工作:

  1. 创建一个新的容器元素(如果需要的话)。
  2. 检查是否支持WebGL技术,如果不支持则显示错误对话框。
  3. 初始化应用程序时钟。
  4. 创建一个带有WebGL 1.0或WebGL 2.0上下文的新3D画布,并将其添加到容器元素中。
  5. 初始化一个GLTF加载器。
  6. 添加一个应用程序实例到v3d.apps列表(在非模块化引擎的情况下)。

属性

.actions : Array

用于调度应用程序动画的animation actions数组。除了直接访问这个列表,你还可以使用getAnimationActionByName方法根据剪辑名来搜索一个动作。

.clearBkgOnLoad : Boolean

加载glTF场景后,设置场景背景为null。默认false

.container : HTMLElement

一个容器元素。这是用于渲染操作的3D画布的父元素。

.scene : Scene

应用程序的主场景。

.camera : Camera

应用程序的主相机。

.clock : Clock

应用程序的时钟对象。

.compileCallbacks : Array

在着色器编译之前将被调用的函数数组。着色器编译发生在场景加载所有资产(glTF元数据,二进制,纹理)被获取之后。

使用编译回调来启用后期处理或添加雾,因为在运行时添加这些效果会对性能产生负面影响。

function initFog(appInstance) { appInstance.scene.fog = new v3d.FogExp2('green', 0.01); } // loaded GLTF 2.0 asset var url = 'my_scene.gltf'; // construct a new application with simple rotating preloader var app = new v3d.App('v3d-container', null, new v3d.SimplePreloader({ container: 'v3d-container' })); // initialize fog just before shader compilation app.compileCallbacks.push(initFog); // load main scene app.loadScene(url, function() { app.enableControls(); app.run(); });

.controls : null

应用程序主相机控制器物体。

.frame : Number

应用程序的当前渲染帧。

.frameRateDivider : Number

应用程序FPS除数。 使用setFrameDivider 设置该值。

.mixer : AnimationMixer

混合器用于播放从glTF数据加载的动画。

.preloader : HTMLElement

App preloader元素(仅在场景加载时存在)

.renderer : WebGLRenderer

应用程序WebGL渲染器。

.renderCallbacks : Array

每次渲染开始时将被调用的函数数组。

.loader : GLTFLoader

应用程序 glTF 加载器。

.worldCubemapRes : Number

表示世界材质的立方体贴图纹理的分辨率。默认是1024。

.worldMaterial : Material

已弃用。 使用 Scene.worldMaterial 代替。 该材质用于生成世界环境。

.xrControllers : Array

活动WebXR会话的控制器对象数组。

.xrSession : XRSession

活动 WebXR 会话。

方法

.animate() → null

场景更新处理程序:渲染,动画和相机控制。不要改变,除非你知道你在做什么。

.appendScene(url, loadCb, progressCb, errorCb, loadCameras, loadLights) → null

将指定glTF文件中的场景附加到当前场景。loadCb回调将在加载完成后作为参数接收加载的场景。

如果应用程序中没有活动场景,则不会添加任何内容。

loadCamerasloadLights等参数用于指定相机和灯光是否会从加载的场景中附加。默认情况下,两个参数都为true

.cleanup() → null

已弃用。 使用 disposeunload 代替。

.disablePostprocessing(keepOutline) → null

禁用所有后期处理效果(当keepOutline=true时,outline除外)。

.disableRendering(after) → null

在给定帧数后禁用动画循环中的图形更新(指定0立即禁用)。控制器和动画混合器将不断更新,渲染回调将不断被调用。

.disableSSAA() → null

禁用超级采样抗锯齿。

.dispose() → null

卸载场景(通过调用unload)并处理整个应用程序,包括清理应用程序的renderer和从DOM中删除canvas元素。

处理后应用程序不再可用。这种方法最适合于需要彻底清理的情况。

.enableControls() → null

启用应用程序主相机的控制。根据为相机指定的控制类型,这个方法将提供“轨道”,“飞行”或静态相机。

.enablePostprocessing(effects) → null

启用给定的后处理效果。

.enableRendering() → null

在动画循环中启用图形更新。

.enableSSAA(sampleLevel, iterative) → null

开启超级采样抗锯齿。采样的数量计算为2^采样级别(例如指定4以启用16x SSAA)。

.getCamera() → Camera

返回应用程序的主相机。

.getHeight() → number

返回计算的容器元素高度。

.getWidth() → number

返回计算的容器元素宽度。

.hideFPS() → null

隐藏帧率计数器。

.load(url, loadOkCb, loadErrorCb, autoStart) → null

已弃用。 使用 loadScene 代替。

加载glTF场景。加载完成后,loadOkCb回调将接收加载的场景作为参数。

如果已经有一个活动场景(例如,通过load方法在加载之前加载),则先使用unload以避免现有场景与加载的场景之间发生冲突。

.loadScene(url, loadCb, progressCb, errorCb) → null

加载glTF场景。加载完成后,loadOkCb回调将接收加载的场景作为参数。

如果已经有一个活动场景(例如,通过load方法在加载之前加载),则先使用unload以避免现有场景与加载的场景之间发生冲突。

.onResize() → null

画布调整大小事件的处理程序。除非你知道你在做什么,否则不要改变。

.printPerformanceInfo(delta) → null

评估并打印渲染性能概要文件。Delta是一个可选的评估周期(默认为1)。

.render() → null

场景渲染处理程序。除非你知道你在做什么,否则不要改变。

.run() → null

通过移除预加载程序并开始渲染循环来启动应用程序。

.setFrameRateDivider(divider : Integer) → null

通过将最大帧除以指定的整数来降低最大帧。默认情况下,引擎尝试以每秒60帧的速度渲染场景。例如,如果除数设置为2,FPS最高会达到30。

.showFPS() → null

显示帧率计数器。

.unload(rootObj) → null

rootObj -- (可选) 要和子物体一起卸载的物体;如果没有给定物体或给定物体是主应用程序场景,则该方法将执行完全场景清理。

根据参数,卸载部分或整个场景。

如果给定的rootObj是场景物体之一,则此方法将从场景中移除给定物体及其子物体,并释放相关资源(几何体、材质、纹理等)。如果给定的rootObj是场景实例本身,则该方法执行完整的场景清理,包括处理所有物体、场景环境、摄影机和摄影机控制器、动画、后处理、内部webgl对象等。。。

完全卸载应用程序的场景后,可以使用loadScene方法加载一个全新的场景。这种方法最适合在不处理整个应用程序的情况下加载/卸载多个场景。

.updateEnvironment(wMat) → null

从指定的材质更新世界环境。此类材质通常存储在Scene.worldMaterial属性中。

.updateEnvMapProbes(object3d) → null

object3d - 在其子物体中搜寻探测对象的物体或场景

更新给定object3d对象子物体的所有CubeReflectionProbe对象。

源代码

关于如何获取此模块的源代码,请查看 本页