2016-04-03 64 views
0

在three.js中測試代碼時,不需要動畫。我可以看到第一個渲染幀。這樣可以降低功耗,並且可以在顯卡升溫時阻止筆記本電腦上的風扇進入。如何關閉three.js中的動畫

在three.js所的例子具有以下結構:

function init() { 
    animate() 
} 

function animate() { 
    requestAnimationFrame(animate); 
    render(); 
    targetRotation = targetRotationOnMouseDown + (mouseX - mouseXOnMouseDown) * 0.05; 
} 

function render() { 
    group.rotation.y += (targetRotation - group.rotation.y) * 0.05; 
    renderer.render(scene, camera); 
} 

我不知道如何關閉重複調用動畫。 有沒有簡單的方法來關閉動畫?

+0

作爲一個快速黑客,只是註釋掉'requestAnimationFrame(動畫);'或參見[這個答案](HTTP ://stackoverflow.com/questions/14465495/how-do-i-stop-requestanimationframe/14466255#14466255)。 – WestLangley

+0

當您註釋掉requestAnimationFrame時,窗口不會刷新。 – Dov

+0

其實,現在看起來像ti的工作。刷新問題 – Dov

回答

1

你不必在three.js中有一個動畫循環 - 比方說,如果你有一個靜態場景。只需致電

renderer.render(scene, camera); 

無論攝像機何時移動或裝載機完成加載模型或加載紋理,您都需要重新渲染。

如果使用OrbitControls用靜態場景,您可以實例OrbitControls像這樣:

controls = new THREE.OrbitControls(camera, renderer.domElement); 
controls.addEventListener('change', render); // use if there is no animation loop 

其中render()電話renderer.render(scene, camera)

如果您正在加載模型或紋理,three.js加載器具有您可以指定的回調函數。例如,

var loader = new THREE.TextureLoader(); 
var texture = loader.load('myTexture.jpg', render); 

而且

var manager = new THREE.LoadingManager(); 
var loader = new THREE.OBJLoader(manager); 

loader.load('myModel.obj', function(object) { 
    // your code... 
    render(); 
} 

three.js所r.75