App - Verge3D 用户手册 - Soft8Soft
Description: App是使用JavaScript创建和管理3D应用程序的主类。

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回调将在加载完成后作为参数接收加载的场景。
如果应用程序中没有活动场景，则不会添加任何内容。
loadCameras和loadLights等参数用于指定相机和灯光是否会从加载的场景中附加。默认情况下，两个参数都为true。

### # .cleanup() → null

已弃用。 使用 dispose 或 unload 代替。

### # .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对象。

## 源代码

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