<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Three框架</title> <script src="../static/three.js-master/build/three.js"></script> <script src="../static/three.js-master/examples/js/libs/stats.min.js"></script> <style type="text/css"> div#canvas-frame { border: none; cursor: pointer; width: 100%; height: 600px; background-color: #EEEEEE; } </style> <script> var renderer; // 渲染器 var stats; // 性能監視器 function initThree() { width = window.innerWidth; height = window.innerHeight; renderer = new THREE.WebGLRenderer({ antialias : true }); renderer.setSize(width, height); document.getElementById('canvas-frame').appendChild(renderer.domElement); renderer.setClearColor(0xFFFFFF, 1.0); stats = new Stats(); // 建立一個性能監視器 stats.domElement.style.position = 'absolute'; // 樣式, 座標 stats.domElement.style.left = '0px'; stats.domElement.style.top = '0px'; document.getElementById('canvas-frame').appendChild(stats.domElement); // 添加到canvas-frame } var camera; // 攝像機 function initCamera() { camera = new THREE.PerspectiveCamera(45, width / height, 1, 10000); camera.position.x = 0; camera.position.y = 0; camera.position.z = 800; camera.up.x = 0; camera.up.y = 1; camera.up.z = 0; camera.lookAt(0, 0, 0); } var scene; // 場景 function initScene() { scene = new THREE.Scene(); } var light; // 光線 function initLight() { light = new THREE.AmbientLight(0xFF0000); // 環境光源 light.position.set(100, 100, 200); scene.add(light); light = new THREE.PointLight(0x00FF00); // 點光源 light.position.set(0, 0,300); scene.add(light); } var mesh; // 模型 function initObject() { var geometry = new THREE.CylinderGeometry( 100,150,400); // 構造圓柱體 var material = new THREE.MeshLambertMaterial( { color:0xFFFFFF} ); // 構造表面 mesh = new THREE.Mesh( geometry,material); // 建立模型 mesh.position = new THREE.Vector3(0,0,0); scene.add(mesh); } function threeStart() { initThree(); initCamera(); initScene(); initLight(); initObject(); animation(); } function animation() { //renderer.clear(); //camera.position.x =camera.position.x +1; mesh.position.x-=1; renderer.render(scene, camera); requestAnimationFrame(animation); stats.update(); // 調用stats.update()函數來統計時間和幀數 } </script> </head> <body onload="threeStart();"> <div id="canvas-frame"></div> </body> </html>
性能監視器是three.js裏面的一個類:css
var stats = new Stats(); stats.setMode(1); // 0: fps, 1: ms // 將stats的界面對應左上角 stats.domElement.style.position = 'absolute'; stats.domElement.style.left = '0px'; stats.domElement.style.top = '0px'; document.body.appendChild( stats.domElement ); setInterval( function () { stats.begin(); // 你的每一幀的代碼 stats.end(); }, 1000 / 60 );
一、setMode函數html
參數爲0的時候,表示顯示的是FPS界面,參數爲1的時候,表示顯示的是MS界面。canvas
二、stats的domElementapp
stats的domElement表示繪製的目的地(DOM),波形圖就繪製在這上面。框架
三、stats的begin函數dom
begin,在你要測試的代碼前面調用begin函數,在你代碼執行完後調用end()函數,這樣就可以統計出這段代碼執行的平均幀數了。函數
附帶three.js代碼,點擊下載性能
附帶status.min.js代碼,點擊下載測試