Three.js利用性能插件stats实现性能监听的方法

发布时间 - 2026-01-11 03:23:59    点击率:

前言

关于性能:测试一个程序,性能上是否有瓶颈,在3D世界里,经常使用帧数的概念,首先我们来定义一下帧数的意义。

帧数:图形处理器每秒钟能够刷新几次,通常用fps(Frames Per Second)来表示

关于性能:测试一个程序,性能上是否有瓶颈,在3D世界里,经常使用帧数的概念,首先我们来定义一下帧数的意义。

帧数:图形处理器每秒钟能够刷新几次,通常用fps(Frames Per Second)来表示

stats性能插件添加了以后,会默认在左上角显示性能帧数,每次刷新所用时间,占用内存。鼠标左键点击可进行切换,默认显示每秒的帧数。

   

首先需要将stats插件引入,地址是官网下载文件里面的examples/js/libs/stats.min.js。

然后需要实例化一个组件,然后添加到dom当中。

//初始化性能插件 
 var stats; 
 function initStats() { 
 stats = new Stats(); 
 document.body.appendChild(stats.dom); 
 } 

需要在requestAnimationFrame()函数调用里面更新stats。

function animate() { 
 //更新控制器 
 controls.update(); 
 render(); 
 
 //更新性能插件 
 stats.update(); 
 requestAnimationFrame(animate); 
 } 

就这样,页面当中就会显示出来正常插件效果了。

设置默认显示的监听。

Stats.prototype.setMode()方法可以设置插件的默认监听

stats.setMode(0); //默认的监听fps 
stats.setMode(1); //默认的监听画面渲染时间 
stats.setMode(2); //默认的监听当前的不知道是啥 

案例也是用的上一节的案例写的,全部代码:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
 <meta charset="UTF-8"> 
 <title>Title</title> 
 <style type="text/css"> 
 html, body { 
  margin: 0; 
  height: 100%; 
 } 
 
 canvas { 
  display: block; 
 } 
 
 </style> 
</head> 
<body onload="draw();"> 
 
</body> 
<script src="build/three.js"></script> 
<script src="examples/js/controls/TrackballControls.js"></script> 
<script src="examples/js/libs/stats.min.js"></script> 
<script> 
 var renderer; 
 function initRender() { 
 renderer = new THREE.WebGLRenderer({antialias:true}); 
 renderer.setSize(window.innerWidth, window.innerHeight); 
 document.body.appendChild(renderer.domElement); 
 } 
 
 var camera; 
 function initCamera() { 
 camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 10000); 
 camera.position.set(0, 0, 400); 
 } 
 
 var scene; 
 function initScene() { 
 scene = new THREE.Scene(); 
 } 
 
 var light; 
 function initLight() { 
 scene.add(new THREE.AmbientLight(0x404040)); 
 
 light = new THREE.DirectionalLight(0xffffff); 
 light.position.set(1,1,1); 
 scene.add(light); 
 } 
 
 function initModel() { 
 var map = new THREE.TextureLoader().load("examples/textures/UV_Grid_Sm.jpg"); 
 var material = new THREE.MeshLambertMaterial({map:map}); 
 
 var cube = new THREE.Mesh(new THREE.BoxGeometry(100, 200, 100, 1, 1, 1), material); 
 scene.add(cube); 
 } 
 
 //初始化性能插件 
 var stats; 
 function initStats() { 
 stats = new Stats(); 
 document.body.appendChild(stats.dom); 
 } 
 
 //用户交互插件 鼠标左键按住旋转,右键按住平移,滚轮缩放 
 var controls; 
 function initControls() { 
 controls = new THREE.TrackballControls( camera ); 
 //旋转速度 
 controls.rotateSpeed = 5; 
 //变焦速度 
 controls.zoomSpeed = 3; 
 //平移速度 
 controls.panSpeed = 0.8; 
 //是否不变焦 
 controls.noZoom = false; 
 //是否不平移 
 controls.noPan = false; 
 //是否开启移动惯性 
 controls.staticMoving = false; 
 //动态阻尼系数 就是灵敏度 
 controls.dynamicDampingFactor = 0.3; 
 //未知,占时先保留 
 //controls.keys = [ 65, 83, 68 ]; 
 controls.addEventListener( 'change', render ); 
 } 
 
 function render() { 
 renderer.render( scene, camera ); 
 } 
 
 //窗口变动触发的函数 
 function onWindowResize() { 
 
 camera.aspect = window.innerWidth / window.innerHeight; 
 camera.updateProjectionMatrix(); 
 controls.handleResize(); 
 render(); 
 renderer.setSize( window.innerWidth, window.innerHeight ); 
 
 } 
 
 function animate() { 
 //更新控制器 
 controls.update(); 
 render(); 
 
 //更新性能插件 
 stats.update(); 
 requestAnimationFrame(animate); 
 } 
 
 function draw() { 
 initRender(); 
 initScene(); 
 initCamera(); 
 initLight(); 
 initModel(); 
 initControls(); 
 initStats(); 
 
 animate(); 
 window.onresize = onWindowResize; 
 } 
</script> 
</html> 

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。


# three.js  # stats  # three.js插件  # three  # Three.js基础学习之场景对象  # Three.js实现浏览器变动时进行自适应的方法  # Three.js利用dat.GUI如何简化试验流程详解  # 利用Three.js如何实现阴影效果实例代码  # Three.js实现绘制字体模型示例代码  # Three.js利用Detector.js插件如何实现兼容性检测详解  # Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解  # Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解  # Three.js入门之hello world以及如何绘制线  # Three.js如何实现雾化效果示例代码  # 帧数  # 几次  # 变焦  # 鼠标左键  # 每秒钟  # 就会  # 右键  # 有一定  # 这篇文章  # 谢谢大家  # 官网  # 有疑问  # lang  # gt  # head  # en  # setMode  # html  # update  # render 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速重置建站主机并恢复默认配置?  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  Java解压缩zip - 解压缩多个文件或文件夹实例  奇安信“盘古石”团队突破 iOS 26.1 提权  Laravel如何与Pusher实现实时通信?(WebSocket示例)  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  如何在Tomcat中配置并部署网站项目?  如何用已有域名快速搭建网站?  ,怎么在广州志愿者网站注册?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  如何在万网主机上快速搭建网站?  历史网站制作软件,华为如何找回被删除的网站?  免费网站制作appp,免费制作app哪个平台好?  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  如何获取上海专业网站定制建站电话?  Bootstrap整体框架之CSS12栅格系统  Laravel如何实现API版本控制_Laravel版本化API设计方案  韩国服务器如何优化跨境访问实现高效连接?  Laravel如何实现多对多模型关联?(Eloquent教程)  太平洋网站制作公司,网络用语太平洋是什么意思?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  微信小程序 五星评分(包括半颗星评分)实例代码  javascript基本数据类型及类型检测常用方法小结  如何在阿里云ECS服务器部署织梦CMS网站?  七夕网站制作视频,七夕大促活动怎么报名?  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理  做企业网站制作流程,企业网站制作基本流程有哪些?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  简历没回改:利用AI润色让你的文字更专业  如何在IIS7中新建站点?详细步骤解析  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  如何在腾讯云服务器快速搭建个人网站?  javascript如何操作浏览器历史记录_怎样实现无刷新导航  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  linux top下的 minerd 木马清除方法  Android Socket接口实现即时通讯实例代码  nginx修改上传文件大小限制的方法  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  如何快速查询网站的真实建站时间?  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  简单实现jsp分页  Bootstrap整体框架之JavaScript插件架构  如何在七牛云存储上搭建网站并设置自定义域名?  php 三元运算符实例详细介绍  想要更高端的建设网站,这些原则一定要坚持!  昵图网官网入口 昵图网素材平台官方入口  如何在阿里云购买域名并搭建网站?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?