2016-03-26 6 views
9

हिल रहा है मुझे घूर्णन में एक क्षेत्र के प्रतिपादन के साथ एक अजीब समस्या है: एनीमेशन हिलाता है और मुझे नहीं पता कि यह समस्या कहां से आती है।थ्री.जेएस - प्रतिपादन के साथ समस्या - एनीमेशन

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 कार्य::

यहाँ this link

पर उदाहरण और प्रस्तुत करना समारोह है

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) 

    } 

अगर किसी को देख सकता था कि क्या गलत है, यह अच्छा होगा,

अपनी मदद के लिए धन्यवाद

अद्यतन:

मैं के नीचे समाधान डालने की कोशिश की, मैं काम एनीमेशन बनाने के लिए नहीं मिला, कुछ भी प्रदर्शित होता है: यहाँ jsfiddle पर मेरे प्रयास:

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

मैं performance.now(), लेकिन एनीमेशन अभी भी मिलाते हुए है के साथ भी कोशिश की, आप इसे https://jsfiddle.net/ysis81/2Lok5agy/3/

पर देख सकते हैं मैंने इस समस्या को हल करने के लिए एक बाउंटी शुरू कर दी है।

+0

हिलाने से आपका क्या मतलब है? क्या आपने लगातार अपडेट समय और एनिमेशन इंटरपोलेशन के साथ गेम लूप का उपयोग करने का प्रयास किया है? –

+0

@ माइकल मिस्ज़्ज़िज़िज़िन रोटेशन के दौरान, क्षेत्र ब्लेंचिंग कर रहा है, जैसे कि एनीमेशन का रीफ्रेश निरंतर नहीं था या झटकेदार था ... क्या आपका मतलब है कि आप अपने कंप्यूटर पर इस मुद्दे को अपने जेएसएफडी लिंक के साथ पुन: पेश नहीं कर सकते? – youpilat13

+1

इसे आज़माएं: https://jsfiddle.net/3urtkpkv/। आपको कैमरे को नियंत्रित करने के लिए 'ट्रैकबॉल नियंत्रण' नहीं पूछना चाहिए और फिर कैमरे को अपने आप नियंत्रित करने का प्रयास करना चाहिए। इसे सरल रखें। असल में, मैं 'ऑर्बिट कंट्रोल्स 'पर स्विच करूंगा। इसमें 'ऑटोरोटेट' संपत्ति है। – WestLangley

उत्तर

5

अनुरोधएनीमेशन फ़्रेम आपके कॉलबैक रेंडर फ़ंक्शन को टाइमस्टैम्प पैरामीटर के साथ निष्पादित करेगा। अंतिम फ्रेम के बाद से कितने मिलीसेकंड पास हुए हैं, इसकी गणना करने के लिए उस पैरामीटर का उपयोग करें। फिर घूर्णन के कुछ प्रतिशत के रूप में उस 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

संबंधित मुद्दे