全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

前言

关于性能:测试一个程序,性能上是否有瓶颈,在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 


相关文章: 建站之星如何快速生成多端适配网站?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  网站制作说明怎么写,简述网页设计的流程并说明原因?  如何挑选最适合建站的高性能VPS主机?  如何获取开源自助建站系统免费下载链接?  如何快速搭建FTP站点实现文件共享?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何在阿里云购买域名并搭建网站?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  如何使用Golang安装API文档生成工具_快速生成接口文档  网站制作企业,网站的banner和导航栏是指什么?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  无锡营销型网站制作公司,无锡网选车牌流程?  如何快速打造个性化非模板自助建站?  如何用PHP快速搭建高效网站?分步指南  建站主机系统SEO优化与智能配置核心关键词操作指南  制作网站的模板软件,网站怎么建设?  官网网站制作腾讯审核要多久,联想路由器newifi官网  浅谈Javascript中的Label语句  如何在宝塔面板中修改默认建站目录?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  建站之星好吗?新手能否轻松上手建站?  建站之星如何快速更换网站模板?  建站之星代理费用多少?最新价格详情介绍  山东云建站价格为何差异显著?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  如何在阿里云通过域名搭建网站?  设计网站制作公司有哪些,制作网页教程?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  c# await 一个已经完成的Task会发生什么  c++ stringstream用法详解_c++字符串与数字转换利器  如何通过服务器快速搭建网站?完整步骤解析  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  制作门户网站的参考文献在哪,小说网站怎么建立?  定制建站流程步骤详解:一站式方案设计与开发指南  建站VPS配置与SEO优化指南:关键词排名提升策略  实惠建站价格推荐:2025年高性价比自助建站套餐解析  如何用花生壳三步快速搭建专属网站?  如何自定义建站之星网站的导航菜单样式?  如何选择最佳自助建站系统?快速指南解析优劣  高端建站如何打造兼具美学与转化的品牌官网?  宝塔新建站点报错如何解决?  Android自定义listview布局实现上拉加载下拉刷新功能  如何撰写建站申请书?关键要点有哪些?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。