2012-11-19 28 views
6

के लिए कास्टिंग मैं रे कास्टिंग का उपयोग कर एक लाइन आकर्षित करने के लिए कोशिश कर रहा हूँ। असल में मैं कुछ मेरी "खिलाड़ी" से आ रही लाइनों स्थापित करना चाहते हैं सभी दिशाओं में बाहर आपत्ति है।Three.js रे टकराव की जांच

(ताकि तरह: https://gamedev.stackexchange.com/questions/35013/how-to-handle-3d-collisions-using-raycasting-with-a-reflection-vector)

मैं इस तो मैं तो का उपयोग मैं अपने टक्कर पता लगाने नेत्रहीन देख सकते हैं कर सकते हैं।

मैं जानता हूँ कि मैं टक्कर पता लगाने क्या करना अलग अलग तरीकों से उपयोग कर सकते हैं, लेकिन मैं एक सीखने का पता लगाने के रूप में इस तरह से उपयोग कर रहा हूँ।

मेरे मुद्दा कोड के नीचे है एक लाइन खींचता है लेकिन यह बेतरतीब ढंग से लंबाई को बदल रहा है और हमेशा उसी कोण पर इंगित नहीं।

var ray = new THREE.Ray(player.model.objects.position, new THREE.Vector3(1, 1, 1));

var geometry = new THREE.Geometry(); 


// my issue is here. I don't think this is the right way use a ray to workout the second vector? 

// EDIT: Realized this should be set at player position and outwards. 
//var newx = 300 * ray.direction.x; 
//var newz = 300 * ray.direction.z; 

// EDIT CODE UPDATE 
var newx = (player.model.objects.position.x) + (60 * ray.direction.x); 
var newz = (player.model.objects.position.z) + (60 * ray.direction.z); 

// THREE.Vector3 {x: 1310.1526178356803, y: 0, z: 1290.8237947033065} 
console.log(player.model.objects.position); 

geometry.vertices.push(player.model.objects.position); 
geometry.vertices.push(new THREE.Vector3(newx, player.model.objects.position.y, newz)); 

var line = new THREE.Line(geometry, material); 

scene.add(line);   

किसी भी मदद की सराहना की।

उत्तर

1

मुझे लगता है कि मॉडल को देखने के बाद एक ही बात करने के लिए .. जब से मैं यह उसी तरह करने की कोशिश की कोशिश कर रहा था और यह पता लगा नहीं कर सकता है, मैं एक विकल्प प्रदान करेंगे।

var line; 

function update() { 

    // Z- DIRECTION 
    raycaster.ray.direction.set(0, 0, -1); 

    var geometry = new THREE.Geometry(); 

    intersections = raycaster.intersectObjects(objects); 
    if (intersections.length > 0) { 
     var geometry = new THREE.Geometry(); 

     // POSITION OF MESH TO SHOOT RAYS OUT OF 
     geometry.vertices.push(obj.position); 
     geometry.vertices.push(intersections[0].point); 

     scene.remove(line); 
     line = new THREE.Line(geometry, new THREE.LineBasicMaterial({color: 0x990000})); 
     scene.add(line); 
    } 

} 

तो अब आप एक लाइन जो कुछ करीबी प्रतिच्छेदन करती हैं में अपने जाल से बाहर शूटिंग की है।

https://dl.dropbox.com/u/42766757/guy.png