2012-11-19 24 views
6

Ray dökümü kullanarak bir çizgi çizmeye çalışıyorum. Temel olarak, "player" nesnesinden gelen tüm yönlerde bazı satırları kurmak istiyorum.Çarpışma Tespiti için Three.js Ray Döküm

(şöyle: https://gamedev.stackexchange.com/questions/35013/how-to-handle-3d-collisions-using-raycasting-with-a-reflection-vector)

Bu yüzden o zaman görsel olarak benim çarpışma algılama görebilirsiniz kullanabilirsiniz istiyorum.

Çarpışma algılaması için farklı yollar kullanabileceğimi biliyorum, ancak bu yolu bir öğrenme algılaması olarak kullanıyorum.

Sorunum, aşağıdaki satırın bir çizgi çizmesidir ancak rastgele olarak uzunluğu değiştiriyor ve her zaman aynı açıya işaret etmiyor gibi görünüyor.

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

takdir Herhangi bir yardım.

cevap

1

Bu modeli gördükten sonra aynı şeyi yapmaya çalışıyordum .. Bunu aynı şekilde yapmaya çalıştığımdan ve bunu anlayamadığımdan, bir alternatif sunacağım.

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

} 

Şimdi de çizgi yakın kesiştiği ne olursa olsun içine ağ dışında çekim var.

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