2012-11-19 45 views
6

Tôi đang cố gắng vẽ đường bằng cách sử dụng tính năng truyền tia. Về cơ bản, tôi muốn thiết lập một số dòng đến từ đối tượng "người chơi" của tôi theo mọi hướng.Truyền phát Three.js cho phát hiện va chạm

(như vậy: https://gamedev.stackexchange.com/questions/35013/how-to-handle-3d-collisions-using-raycasting-with-a-reflection-vector)

Tôi muốn điều này vì vậy tôi sau đó có thể sử dụng Tôi có thể thấy phát hiện va chạm trực quan của tôi.

Tôi biết tôi có thể sử dụng các cách khác nhau để phát hiện va chạm, nhưng tôi đang sử dụng cách này như là một phát hiện học tập.

Vấn đề của tôi là mã bên dưới vẽ một đường nhưng dường như thay đổi độ dài một cách ngẫu nhiên và không phải lúc nào cũng trỏ cùng một góc.

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);   

Mọi trợ giúp đều được đánh giá cao.

Trả lời

1

Tôi đã cố gắng làm điều tương tự sau khi xem mô hình đó .. Vì tôi đã cố gắng làm điều đó theo cùng một cách và không thể hình dung ra, tôi sẽ đưa ra một giải pháp thay thế.

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); 
    } 

} 

Vì vậy, bây giờ bạn có một đường bắn ra khỏi lưới vào bất kỳ giao điểm gần nhất nào.

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

Các vấn đề liên quan