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


Posted in Javascript onSeptember 25, 2017

前言

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

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

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

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

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

Three.js利用性能插件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>

总结

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

Javascript 相关文章推荐
Javascript技术技巧大全(五)
Jan 22 Javascript
js实现运行代码需要刷新的解决方法
Aug 18 Javascript
表格 隔行换色升级版
Nov 07 Javascript
深入理解Javascript中的循环优化
Nov 09 Javascript
javascript获取元素CSS样式代码示例
Nov 28 Javascript
jquery的each方法使用示例分享
Mar 25 Javascript
js中函数调用的两种常用方法使用介绍
Jul 17 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
Mar 13 Javascript
javascript框架设计之种子模块
Jun 23 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
Jun 01 Javascript
利用vue + element实现表格分页和前端搜索的方法
Dec 25 Javascript
JS自定义对象创建与简单使用方法示例
Jan 15 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
Sep 25 #Javascript
Three.js入门之hello world以及如何绘制线
Sep 25 #Javascript
es6系列教程_ Map详解以及常用api介绍
Sep 25 #Javascript
简单谈谈js的数据类型
Sep 25 #Javascript
实现两个文本框同时输入的实例
Sep 25 #Javascript
zTree jQuery 树插件的使用(实例讲解)
Sep 25 #jQuery
对于input 框限定输入值为浮点型的js代码
Sep 25 #Javascript
You might like
老照片 - 几十年前的收音机与人
2021/03/02 无线电
德劲1107的电路分析与打磨
2021/03/02 无线电
PHP中cookies使用指南
2007/03/16 PHP
php 多个submit提交表单 处理方法
2009/07/07 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
window.onbeforeunload方法在IE下无法正常工作的解决办法
2010/01/23 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
JS实现简单的顶部定时关闭层效果
2014/06/15 Javascript
Javascript中实现String.startsWith和endsWith方法
2015/06/10 Javascript
web打印小结
2017/01/11 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
Angular2之二级路由详解
2018/08/31 Javascript
Vue表单及表单绑定方法
2018/09/04 Javascript
vue.js购物车添加商品组件的方法
2019/09/17 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
微信小程序聊天功能的示例代码
2020/01/13 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
常见的python正则用法实例讲解
2016/06/21 Python
Python 模块EasyGui详细介绍
2017/02/19 Python
python将txt文件读取为字典的示例
2018/12/22 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
表演方阵解说词
2014/02/08 职场文书
党支部活动策划方案
2014/08/18 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
认真学习保证书
2015/02/26 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
好员工观后感
2015/06/17 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL