6

レイキャスティングを使って線を引こうとしています。基本的に、「プレーヤー」オブジェクトから全方向に出てくるいくつかの線を設定したいと考えています。

(そのように: 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);        

どんな助けでも感謝します。

4

1 に答える 1

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

于 2013-01-22T21:13:07.203 に答える