2012-12-05 13 views
5

थोड़ा जटिल है, मेरे साथ इतना नंगे:Three.js: रे चौराहे जब काम नहीं कर रहा morphtargets का उपयोग कर

  • रे एक दूसरे को काटना काम करता है एक वस्तु नहीं morphTargets है पूरी तरह से जब।

  • एक वस्तु morphTargets केवल मूल स्थिति विभाजित किया जा सकता है, तो वह कहते हैं, अगर मैं 0,0,0 से 50,50,50 करने के लिए एक मॉडल रूप रे 50,50,50 में वस्तु के साथ एक दूसरे को काटना नहीं होगा, बजाय, जब मैं 0,0,0 से अधिक माउस प्राप्त करता हूं मुझे एक चौराहे मिलती है (भले ही वस्तु अब और नहीं है !?)।

क्या कोई ऐसा ध्वज है जिसे मुझे तीन.जेएस बनाने के लिए चालू करने की आवश्यकता है, यह पता है कि कविताएं चली गई हैं?

संपादित करें, कोड जोड़ा गया।

यह मेरा जाल बना देता है और (जो रे का उपयोग करता है एक दूसरे को काटना) वस्तुओं सरणी में जोड़ देता है:

function createDeer(deerGeometry, materials) { 
    mesh = new THREE.MorphAnimMesh(deerGeometry, new THREE.MeshLambertMaterial({ color: 0xE8E8E8, ambient: 0xE8E8E8, morphTargets: true, vertexColors: THREE.FaceColors })); 
    mesh.scale.set(3, 3, 3); 
    mesh.position.set(0, -3, 0); 
    mesh.rotation.set(0, 0, 0); 
    mesh.castShadow = true; 
    mesh.receiveShadow = true; 
    mesh.geometry.dynamic = true; 
    scene.add(mesh); 
    objects.push(mesh); 
} 

रे चौराहे, mousedown (वहाँ एक माउस ले जाएँ के रूप में अच्छी तरह से, एक ही बात) पर होता है जैसे कि मैंने कहा, कोड ठीक काम करता है, यह सिर्फ मूल unmorphed जाल के साथ अन्तर्विभाजक है:

function onDocumentMouseDown(event) { 

    event.preventDefault(); 

    var vector = new THREE.Vector3(mouse.x, mouse.y, 0.5); 
    projector.unprojectVector(vector, camera); 

    var ray = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize()); 

    var intersects = ray.intersectObjects(objects); 

    if (intersects.length > 0) { 

     SELECTED = intersects[ 0 ].object; 

     for(var i=0; i<objects.length; i++) 
      { 
       if(SELECTED.position.x == objects[0].position.x) { 
        thisObject = i; 
        } 
       } 

      } 

     var intersects = ray.intersectObject(plane); 

     container.style.cursor = 'pointer'; 
    } 

} 

मैं इस समस्या तय कर लिया है तथ्य (परिणत जाल के रूप में) है कि हिरण की स्थिति से संबंधित होना चाहिए कभी नहीं बदलता है, तथापि शिखर दूर चले जाते हैं, और जैसा कि किरण छेड़छाड़ करता है कॉम है ऑब्जेक्ट की स्थिति को पार करना शायद समस्या यहां है?

+0

की पूर्ण सीमा तक शामिल करने के लिए कोड लिखा है आप प्रदान की जरूरत है कि कृपया – Ocelot

+0

कोड जोड़ा :) धन्यवाद। – Ian

उत्तर

0

MorphTarget एनीमेशन जगह (shaders कोड में) GPU पर पूरी तरह से लेता है, जबकि रे चौराहे हमेशा CPU पर की जाती है। तो वास्तव में, आप जो वर्णन कर रहे हैं उसे हासिल करने का कोई आसान तरीका नहीं है।

+1

फिर बाध्यकारी बक्से के खिलाफ raycasting मुझे लगता है कि एक आसान (अभी तक सही नहीं) समाधान हो सकता है? – vincent

2

मैंने pull request बनाया है जो इसे विलय और ठीक कर दिया गया है।

नोट यह काम करने के लिए, वस्तु के boundingSphere morphing