ThreeJS 停止渲染

2023-11-27

我正在使用 ThreeJS 处理具有 OrbitControls 的基本 3d 场景。一切都很好,除了它导致我的整个网站滞后,因为即使用户没有看它,它也会自行循环。我想要一个函数,当满足某些条件时(在这种情况下,用户没有查看画布),我可以调用该函数来启动和停止渲染。我有一个启动功能,工作得很好,但停止功能似乎不起作用,因为在 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 );

}

三.js r.67

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ThreeJS 停止渲染 的相关文章

  • JavaScript onTouch 不工作

    谁能告诉我为什么这个 onTouch 处理程序没有触发 var myDiv document getElementById existingContent var myButton a href log out a myDiv append
  • 主干视图 DOM 元素已删除

    我一直在阅读有关 Backbone js 僵尸 或内存泄漏 问题的信息 基本上 当您不再需要该元素时 您必须从 DOM 中解除绑定并删除该元素 以确保所有事件也被删除 现在 我有一个包含几个容器的单页应用程序 div div div div
  • 如何测试 javascript 闭包内的函数

    这似乎是不可能的 也可能是 但我正在尝试更多的 TDD 但我总是在闭包方面碰壁 假设我有以下内容 function createSomething init function privateMethod param return init
  • Android 设备上的 PhoneGap 蓝牙插件

    我一直在尝试让 PhoneGap 工作的蓝牙插件 但我似乎不知道哪里出了问题 首先 我的测试设备是 Galaxy S3 GT 19305T 应用程序是使用PhoneGap CLI http docs phonegap com en 3 0
  • 为什么 JavaScript base-36 转换看起来不明确

    我目前正在编写一段使用 Base 36 编码的 JavaScript 我遇到了这个问题 parseInt welcomeback 36 toString 36 看来要回归了 welcomebacg 我在 Chrome 开发者控制台和 Nod
  • 解析“流”JSON

    我在浏览器中有一个网格 我想通过 JSON 将数据行发送到网格 但浏览器应该在接收到 JSON 时不断解析它 并在解析时将行添加到网格中 换句话说 在接收到整个 JSON 对象后 不应将行全部添加到网格中 应该在接收到行时将其添加到网格中
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • 通过 CDN 使用 Dojo 时如何加载自定义 AMD 模块?

    我正在使用 google 的 CDN 并尝试使用他们的加载程序加载我自己的 AMD 模块 我知道我做错了什么 但我被困住了 有任何想法吗
  • 如何使输入字段和提交按钮变灰

    我想变灰这两件事 http doorsplit heroku com 歌曲输入字段和提交按钮 直到用户输入艺术家 有没有一种简单的方法可以通过 JQuery 来做到这一点 艺术家输入字段的id是 request artist 你可以这样做
  • 为 illustrator 导出脚本以保存为 web jpg

    任何人都可以帮我为 illustrator CC2017 编写一个脚本 将文件以 JPG 格式导出到网络 旧版 然后保存文件并关闭 我有 700 个文件 每个文件有 2 个画板 单击 文件 gt 导出 gt 另存为 Web 旧版 然后右键文
  • 如何获取给定 DOM 元素的所有定义的 CSS 选择器?

    如何使用 jQuery 获取给定 DOM 元素的所有定义的 CSS 选择器 定义后 我的意思是在应用于任何样式表的所有 CSS 选择器document 在某种程度上 这类似于 FireBug 实现的功能 其中显示所选 DOM 元素的所有应用
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • Javascript转换时区问题

    我在转换当前时区的日期时间时遇到问题 我从服务器收到此日期字符串 格式为 2015 10 09T08 00 00 这是中部时间 但是当我使用 GMT 5 中的 new Date strDate 转换此日期时间时 它返回给我的信息如下 这是不
  • JQuery 图像上传不适用于未来的活动

    我希望我的用户可以通过帖子上传图像 因此 每个回复表单都有一个上传表单 用户可以通过单击上传按钮上传图像 然后单击提交来提交帖子 现在我的上传表单可以上传第一个回复的图像 但第二个回复的上传不起作用 我的提交过程 Ajax 在 php 提交
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 如何在 pg-promise 中设置模式

    我正在搜索的文档pg 承诺 https github com vitaly t pg promise特别是在创建客户端时 但我无法找到设置连接中使用的默认架构的选项 它始终使用public架构 我该如何设置 通常 为数据库或角色设置默认架构
  • 使用 Ajax 请求作为源数据的 Jquery 自动完成搜索

    我想做的事 我想使用 jquery 自动完成函数创建一个输入文本字段 该函数从跨域curl 请求获取源数据 结果应该与此示例完全相同 CSS 在这里并不重要 http abload de img jquerydblf5 png http a
  • 如何从图像输入中获取 xy 坐标?

    我有一个输入设置为图像类型

随机推荐

  • Metastore 中分区但 HDFS 中不存在路径

    我们的摄取过程存在问题 这会导致分区被添加到 Hive 中的表中 但 HDFS 中的路径实际上并不存在 我们已经解决了这个问题 但仍然存在这些坏分区 当使用 Tez 查询这些表时 我们收到 FileNotFound 异常 指向 HDFS 中
  • 将ios 5模拟器安装到xcode 5.1?

    我目前在 Mac 10 8 5 上使用 xcode 5 1 但我无法在这个 xcode 中安装 ios 模拟器 有人告诉我如何安装ios 5模拟器吗 伙计 这个really今天 当我从 Xcode 5 0 升级到 Xcode 5 1 并发现
  • 为什么 String.IndexOf 和 String.Contains 在提供阿拉伯文本时不一致?

    我想知道我是否在 NET Framework 中发现了错误 或者我是否不明白某些内容 运行这段代码后 var text var word bool exist text Contains word int index text IndexO
  • Composer 2,您的某些插件似乎与它不兼容

    我尝试从 magento 市场安装扩展 但出现不兼容错误 问题1 magento composer root update plugin 已锁定到版本 1 0 0 并且未请求更新此包 magento composer root update
  • 如何自定义要在“添加更多 portlet”菜单中显示的 portlet

    我需要自定义哪个 portlet 出现在 添加更多 portlet 菜单 中 如下图所示 我需要根据登录的用户或站点 社区 限制此菜单中显示的 portlet 数量 这样 站点所有者或站点管理员将能够仅将全能管理员为他们决定的那些 port
  • 计算并显示页面加载进度百分比

    我有一个加载器 它在页面开始加载时加载 我需要显示其中的完成百分比 我的应用程序包含大量 jquery 和 css 并且还包含 ajax 调用 到目前为止 我已经在页面加载开始时显示进度条 并在 ajax 成功完成时隐藏它 另外 我已经显示
  • 在 Linux 中使用 C 语言使用原始套接字进行数据包嗅探

    我需要在 Linux 中编写一个数据包嗅探器来检测发送的 HTTPS 数据包并保存请求中的 url 我在中找到了这方面的代码安全狂并运行它 该代码运行并且仅嗅探接收到的数据包 但我需要在嗅探器中获取发送的数据包 如何获取这段代码中发送的数据
  • mvn 包因所需工件丢失而失败,即使它存在于我的远程存储库中

    我正在尝试奔跑mvn清理包在我的 Maven 项目上 它失败并显示以下消息 工件 net ezswitch ResourcesComponent jar 0 0 14 的 所需工件缺失 我已经配置了我的设置 xml包括我的远程存储库 如果我
  • 从纯 Lua 创建新的空用户数据

    我想我在 Lua 中的某个地方看到了一个可以返回新用户数据的本机函数 它存在吗 是否可以从普通 Lua 脚本创建自定义用户数据 你可能在想newproxy From http lua users org wiki HiddenFeature
  • Windows 任务管理器中的“VM 大小”是什么意思? [关闭]

    Closed 这个问题是无关 目前不接受答案 从计算机大小的角度来看 虚拟内存是 制作程序的一种方法 想想吧 有大范围的连续 地址 但实际上它的部分 目前使用的都是分散的 RAM 周围 不活动的部分是 保存在磁盘文件中 维基百科 我将 Wi
  • Matlab 中的范围界定如何工作?

    我刚刚发现 令我惊讶的是 调用以下函数 function foo if false fprintf 1 else do nothing end fprintf test 给出和错误Undefined function or variable
  • Tkinter、透明背景、Linux

    有没有办法在 Linux 上的 Tkinter 窗口中获得透明背景 我目前看到的唯一方法是 import tkinter as tk root tk Tk root overrideredirect True root wait visib
  • socket.error: [Errno 13] 创建假电子邮件服务器时权限被拒绝

    我正在尝试创建一个假电子邮件服务器作为 Flask 应用程序的一部分 以使用以下脚本在控制台上打印错误 但是 它会引发错误 我怎样才能解决这个问题 dpadmins MacBook microblog presentation python
  • GooglePlaces API“我们无法理解的响应”错误

    将标准自动完成代码与搜索栏一起使用 placesClient autocompleteQuery searchBar textField text bounds nil filter filter callback results erro
  • 是否可以在 字段中放置链接?

    是否可以在此处放置登录和注册链接
  • 如何确定最佳线程堆栈大小?

    实际上 有两种大小 初始承诺和总保留 您使用静态分析还是动态分析 哪些工具 哪些技术 一种技术是在 main 或线程 main 中使用已知值绘制堆栈 然后在清理时从堆栈限制进行扫描 直到不再找到已知值 您的堆栈末端将被定义为符号 生成一个
  • 从 IDE 禁用 C++ PDB 生成

    我们需要抑制调试符号的生成 项目属性 配置属性 c c 常规 调试信息格式下可用的选项相当于 Z7 Zi 和 ZI 我找不到完全省略 Zx 标志的方法 Unlike 这里的情况 我们正在从 IDE 进行构建 我使用的是Visual Stud
  • 生成 JavaScript 数组的排列[重复]

    这个问题在这里已经有答案了 我在 javascript 中有一个由 n 个不同元素组成的数组 我知道有 n 个 对这些元素进行排序的可能方法 我想知道生成该数组的所有可能顺序的最有效 最快 算法是什么 我有这个代码 var swap fun
  • python 3.9.5 中的相对导入

    我的文件夹结构如下 fff init py fg init py settings init py settings py obng test py 我想将 fg settings 中的 settings py 作为模块导入到 test p
  • ThreeJS 停止渲染

    我正在使用 ThreeJS 处理具有 OrbitControls 的基本 3d 场景 一切都很好 除了它导致我的整个网站滞后 因为即使用户没有看它 它也会自行循环 我想要一个函数 当满足某些条件时 在这种情况下 用户没有查看画布 我可以调用