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在网页中实现读取剪贴板粘贴截图功能
Jun 07 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
Sep 03 Javascript
如何实现移动端浏览器不显示 pc 端的广告
Oct 15 Javascript
聊一聊jQuery插件uploadify使用方法
Aug 24 Javascript
jquery获取easyui日期控件的值实现方法
Nov 09 Javascript
一道面试题引发的对javascript类型转换的思考
Mar 06 Javascript
vue2 中如何实现动态表单增删改查实例
Jun 09 Javascript
基于BootStrap的文本编辑器组件Summernote
Oct 27 Javascript
解决低版本的浏览器不支持es6的import问题
Mar 09 Javascript
cnpm加速Angular项目创建的方法
Sep 07 Javascript
详解angular2.x创建项目入门指令
Oct 11 Javascript
微信小程序里引入SVG矢量图标的方法
Sep 20 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
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
PHP中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
jQuery 常见学习网站与参考书
2009/11/09 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
2015/03/04 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
基于node.js的fs核心模块读写文件操作(实例讲解)
2017/09/10 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
python使用正则表达式替换匹配成功的组
2017/11/17 Python
Python使用Matplotlib实现雨点图动画效果的方法
2017/12/23 Python
python使用requests.session模拟登录
2019/08/09 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
以实惠的价格轻松租车,免费取消:Easyrentcars
2019/07/16 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
优秀员工评语
2014/02/10 职场文书
会计工作决心书
2014/03/11 职场文书
补充协议书范本
2014/04/23 职场文书
酒店总经理岗位职责范本
2014/08/08 职场文书
电大奖学金获奖感言
2014/08/14 职场文书
2016年先进班集体事迹材料
2016/02/26 职场文书
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS