javascript - ThreeJS 停止渲染

标签 javascript three.js lag

我正在使用 ThreeJS 处理具有 OrbitControls 的基本 3d 场景。一切都很好,除了它会导致我的整个网站滞后,因为即使用户没有查看它,它也会自行循环。我想要一个函数,我可以调用它来在满足某些条件时启动和停止渲染(在这种情况下,用户没有查看 Canvas )。我有一个运行良好的启动功能,但停止功能似乎不起作用,因为在 ThreeJS 初始化后我的网站速度慢得令人难以忍受。

我一直在寻找这个问题的解决方案,并找到了几个“解决方案”,但无论出于何种原因,它们都不适用于我的应用程序。我的假设是这些解决方案来自旧版本的 ThreeJS。

这是我的 main.js 文件中的代码:

var scene, 
    camera, 
    controls,
    render,
    requestId = undefined;


function init() {
    scene = new THREE.Scene();
    var threeJSCanvas = document.getElementById("threeJS");
    camera = new THREE.PerspectiveCamera( 75, threeJSCanvas.width / threeJSCanvas.height, 0.1, 1000 );

    controls = new THREE.OrbitControls( camera );

    // Controls and Camera settings

    // Create Geometry.

}

function render() {
    requestId =  requestAnimationFrame(render);
    renderer.render(scene, camera);

}

function start() {
    render();
}

function stop() {
   window.cancelAnimationFrame(requestId);
   requestId = undefined;


}

在我的其他 javascript 文件中,我的 pageChange 函数(这是一个多页面应用程序)中有一个条件,如下所示:

if (page == 5) { // The page with the canvas on it
    if (!locationsRendered) {
    init();
    locationsRendered = true;
}
} else { // If the page is not the page with the canvas on it
    if (locationsRendered) {
        stop();
    }
}

locationsRendered 在本地范围内的第二个 javascript 文件中较早地初始化。

任何帮助将不胜感激,因为我不能让这个简单的 3D 场景在加载后滞后于我的整个应用程序。这是不现实的。

最佳答案

如果您的场景是静态的,则没有理由使用动画循环。您只需要在相机因鼠标或触摸事件移动时重新渲染。

只需使用这种模式:

controls = new THREE.OrbitControls( camera, renderer.domElement );

controls.addEventListener( 'change', render );

function render() {

    renderer.render( scene, camera );

}

three.js r.67

关于javascript - ThreeJS 停止渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23770521/

相关文章:

javascript - 点击关闭多个弹出模式?

javascript - 从 Canvas 获取像素的颜色

c# - 如何将 Angular POST 发送到 C# Asp.Net MVC Controller ?

javascript - 创建一个平面,在两侧添加纹理并在其一侧旋转对象

javascript - 与这个简单示例中的 css 动画相比,Greensock (GSAP) 更不流畅/更生涩。有没有办法改善它?

javascript - 使用 Three.js 和 Fresnel Shader 可视化网格所有面的问题

javascript - JSON模型的动画THREE.js

objective-c - 多次重复时,Objective C声音滞后

java - 来自配置文件或 .java 的巨大数组

mysql - 如何简单地处理(非常)短的 mysql 复制滞后