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
}
container - html元素的id或包含画布的html元素本身。
ctxSettings - 在canvas.getContext()方法中传递的WebGL上下文属性。
preloader - 应用程序Preloader类的实例。
这个构造函数做以下工作:
用于调度应用程序动画的animation actions数组。除了直接访问这个列表,你还可以使用getAnimationActionByName方法根据剪辑名来搜索一个动作。
加载glTF场景后,设置场景背景为null。默认false。
一个容器元素。这是用于渲染操作的3D画布的父元素。
应用程序的主场景。
应用程序的主相机。
应用程序的时钟对象。
在着色器编译之前将被调用的函数数组。着色器编译发生在场景加载所有资产(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();
});
应用程序主相机控制器物体。
应用程序的当前渲染帧。
应用程序FPS除数。 使用setFrameDivider 设置该值。
混合器用于播放从glTF数据加载的动画。
App preloader元素(仅在场景加载时存在)
应用程序WebGL渲染器。
每次渲染开始时将被调用的函数数组。
应用程序 glTF 加载器。
表示世界材质的立方体贴图纹理的分辨率。默认是1024。
已弃用。 使用 Scene.worldMaterial 代替。 该材质用于生成世界环境。
活动WebXR会话的控制器对象数组。
活动 WebXR 会话。
场景更新处理程序:渲染,动画和相机控制。不要改变,除非你知道你在做什么。
将指定glTF文件中的场景附加到当前场景。loadCb回调将在加载完成后作为参数接收加载的场景。
如果应用程序中没有活动场景,则不会添加任何内容。
loadCameras和loadLights等参数用于指定相机和灯光是否会从加载的场景中附加。默认情况下,两个参数都为true。
禁用所有后期处理效果(当keepOutline=true时,outline除外)。
在给定帧数后禁用动画循环中的图形更新(指定0立即禁用)。控制器和动画混合器将不断更新,渲染回调将不断被调用。
禁用超级采样抗锯齿。
卸载场景(通过调用unload)并处理整个应用程序,包括清理应用程序的renderer和从DOM中删除canvas元素。
处理后应用程序不再可用。这种方法最适合于需要彻底清理的情况。
启用应用程序主相机的控制。根据为相机指定的控制类型,这个方法将提供“轨道”,“飞行”或静态相机。
启用给定的后处理效果。
在动画循环中启用图形更新。
开启超级采样抗锯齿。采样的数量计算为2^采样级别(例如指定4以启用16x SSAA)。
返回应用程序的主相机。
返回计算的容器元素高度。
返回计算的容器元素宽度。
隐藏帧率计数器。
已弃用。 使用 loadScene
代替。
加载glTF场景。加载完成后,loadOkCb回调将接收加载的场景作为参数。
如果已经有一个活动场景(例如,通过load方法在加载之前加载),则先使用unload以避免现有场景与加载的场景之间发生冲突。
加载glTF场景。加载完成后,loadOkCb回调将接收加载的场景作为参数。
如果已经有一个活动场景(例如,通过load方法在加载之前加载),则先使用unload以避免现有场景与加载的场景之间发生冲突。
画布调整大小事件的处理程序。除非你知道你在做什么,否则不要改变。
评估并打印渲染性能概要文件。Delta是一个可选的评估周期(默认为1)。
场景渲染处理程序。除非你知道你在做什么,否则不要改变。
通过移除预加载程序并开始渲染循环来启动应用程序。
通过将最大帧除以指定的整数来降低最大帧。默认情况下,引擎尝试以每秒60帧的速度渲染场景。例如,如果除数设置为2,FPS最高会达到30。
显示帧率计数器。
rootObj -- (可选) 要和子物体一起卸载的物体;如果没有给定物体或给定物体是主应用程序场景,则该方法将执行完全场景清理。
根据参数,卸载部分或整个场景。
如果给定的rootObj是场景物体之一,则此方法将从场景中移除给定物体及其子物体,并释放相关资源(几何体、材质、纹理等)。如果给定的rootObj是场景实例本身,则该方法执行完整的场景清理,包括处理所有物体、场景环境、摄影机和摄影机控制器、动画、后处理、内部webgl对象等。。。
完全卸载应用程序的场景后,可以使用loadScene方法加载一个全新的场景。这种方法最适合在不处理整个应用程序的情况下加载/卸载多个场景。
从指定的材质更新世界环境。此类材质通常存储在Scene.worldMaterial属性中。
object3d - 在其子物体中搜寻探测对象的物体或场景
更新给定object3d对象子物体的所有CubeReflectionProbe对象。
关于如何获取此模块的源代码,请查看 本页。