2016-03-26 3 views
9

У меня возникает странная проблема с рендерингом сферы во вращении: кажется, что анимация дрожит, и я не знаю, откуда эта проблема.Three.js - проблема с рендерингом - анимация дрожит

Вот пример на this link

и функция визуализации:

function render() { 

    controls.update(); 
    requestAnimationFrame(render); 

    // For camera rotation : parametric parameter 
    timer = Date.now()*0.0001; 

    // Coordinates of camera 
    coordCamera.set(radiusCamera*Math.cos(timer), radiusCamera*Math.sin(timer), 0); 

    // Rotate camera function 
    rotateCamera(); 

    // Rendering 
    renderer.render(scene, camera); 

    } 

с rotateCamera и computeRotation функции:

function computeRotation (objectRotation, coordObject) { 

    // Apply rotation matrix 
    var rotationAll = new THREE.Matrix4(); 
    var rotationX = new THREE.Matrix4().makeRotationX(objectRotation.rotation.x); 
    var rotationY = new THREE.Matrix4().makeRotationY(objectRotation.rotation.y); 
    var rotationZ = new THREE.Matrix4().makeRotationZ(objectRotation.rotation.z); 
    rotationAll.multiplyMatrices(rotationX, rotationY); 
    rotationAll.multiply(rotationZ); 

    // Compute world coordinates 
    coordObject.applyMatrix4(rotationAll); 

    } 

    function rotateCamera() { 

    // Compute coordinates of camera 
    computeRotation(torus, coordCamera); 

    // Set camera position for motion 
    camera.position.set(coordCamera.x, coordCamera.y, coordCamera.z) 

    } 

Если кто-то мог видеть то, что случилось, это было бы хорошо,

Спасибо за вашу помощь

UPDATE:

Я попытался вставить решение нижеприведенного; Я не добирался, чтобы сделать работу анимации, ничего не отображается: здесь моя попытка на jsfiddle:

https://jsfiddle.net/ysis81/uau3nw2q/5/

Я попытался также с performance.now(), но анимация по-прежнему качалке; вы можете проверить это на https://jsfiddle.net/ysis81/2Lok5agy/3/

Я начал щедрость, чтобы решить, возможно, эту проблему.

+0

Что вы подразумеваете под тряской? Пробовали ли вы использовать игровой цикл с постоянным временем обновления и интерполяции анимаций? –

+0

@ Michał Miszczyszyn Во время вращения шар сглаживает, так как обновление анимации не было непрерывным или было отрывистым ... вы имеете в виду, что вы не можете воспроизвести проблему на своем компьютере с помощью моих jsfiddle ссылок? – youpilat13

+1

Попробуйте следующее: https://jsfiddle.net/3urtkpkv/. Вы не должны просить «TrackballControls» управлять камерой, а затем пытаться самостоятельно управлять камерой. Будь проще. Фактически, я бы переключился на «OrbitControls». Он имеет свойство 'autoRotate'. – WestLangley

ответ

5

requestAnimationFrame выполнит вашу функцию рендеринга обратного вызова с параметром timestamp. Используйте этот параметр, чтобы рассчитать, сколько миллисекунд прошло с момента последнего кадра. Затем используйте этот diff как некоторый процент вращения.

var mySpecificLogic = function (millesecondsSinceLastFrame) { 
    // rotate your camera here 
    // if you want it to rotate 20 degrees every second 
    var rotPerSecond = 20; 
    var rotationPerMS = rotPerSecond/1000; 
    var rotationInDegrees = millesecondsSinceLastFrame * rotationPerMS; 
    // call your rotation function 
    // note: if you are also trying to move the ball with the mouse 
    // you'll want a hook to disable this basic rotation 

    // set the camera to whatever rotation you want 

    renderer.render(scene, camera); 
}; 


var startTheWholeThing = function() { 
    var lastFrameTime; 
    var deltaT; 

    function recurse(thisFrameTime) { 
     window.requestAnimationFrame(recurse); 
     lastFrameTime = lastFrameTime || thisFrameTime; 
     deltaT = thisFrameTime - lastFrameTime; 

     mySpecificLogic(deltaT); 

     lastFrameTime = thisFrameTime; 
    } 
    recurse(); 
}; 

startTheWholeThing(); 
+0

Спасибо, но я не смог включить этот фрагмент кода выше в свой скрипт. Вот моя попытка вставить его в мой код по этой ссылке: https://jsfiddle.net/ysis81/uau3nw2q/4/. Если вы можете взглянуть на мой сценарий, то обратите внимание на – youpilat13

+0

. Фиксированное вращение выглядит правильно для меня. Вы говорите, когда пытаетесь манипулировать сферой с помощью мыши? –

+0

Сфера не отображается со следующей версией: https://jsfiddle.net/ysis81/uau3nw2q/4/, можете ли вы предложить свою фиксированную версию на jsfiddle? – youpilat13

Смежные вопросы