2016-07-05 10 views
1

three.jsでは、私はPointerLockコントロールを使って基本的な一人称シューティングゲームを作っています。 私はあなた「ショット」オブジェクトを意味オブジェクトとの衝突を検出するためにraycasterの方向にthree.jsで線を引く

function onDocumentMouseDown(event) { 
    var raycaster = new THREE.Raycaster(); 
    mouse3D.normalize(); 
    controls.getDirection(mouse3D); 
    raycaster.set(controls.getObject().position, mouse3D); 
    var intersects = raycaster.intersectObjects(objects); 
    ... 
} 

を使用しています。

ここで、弾丸が取った経路を視覚化したいと思います。私は、ユーザーが探している線をレイキャスターの方向に描くことを考えていましたが、これを行う方法を理解できません...誰かが私を助けることができますか?私は3つの新しい.js、決してラインを描くことがこれは難しいとは思わなかった。

更新: 私が使用して線を描画しようとしている:

var geometry = new THREE.Geometry(); 
geometry.vertices.push(...); 
geometry.vertices.push(...); 
var line = new THREE.Line(geometry, material); 
scene.add(line); 

が、私は「...」の代わりに置くために何を把握することはできません。どのポイントに行を移動させるべきかをどのように検出することができますか?どの点から始めるのかを決定する方法は?プレイヤーは移動してジャンプすることもできるため、開始点も常に異なっています。

+0

https://github.com/mrdoob/three.js/wiki/Drawing-linesため – 2pha

+0

感謝その参照。今私はラインを描く方法を知っていますが、私の問題に対処する方法はまだ分かりません。私は私の質問を更新しました。 – binoculars

+0

私は 'push()'メソッドを開始点と終了点(ベクトル)に送る必要があると思います。おそらくあなたのカメラ位置 'geometry.vertices.push(camera.position)'でしょう。 2番目はintersectObjects関数から返されたインターセットの最初の点です。 'geometry.vertices.push(intersects [0] .point)'です。私はRaycasterを使用していないので、これをテストしていないが、それはそれのようなものになるだろう。 – 2pha

答えて

1

あなたは(R83を使用して)以下を使用することができます。

// Draw a line from pointA in the given direction at distance 100 
    var pointA = new THREE.Vector3(0, 0, 0); 
    var direction = new THREE.Vector3(10, 0, 0); 
    direction.normalize(); 

    var distance = 100; // at what distance to determine pointB 

    var pointB = new THREE.Vector3(); 
    pointB.addVectors (pointA, direction.multiplyScalar(distance)); 

    var geometry = new THREE.Geometry(); 
    geometry.vertices.push(pointA); 
    geometry.vertices.push(pointB); 
    var material = new THREE.LineBasicMaterial({ color : 0xff0000 }); 
    var line = new THREE.Line(geometry, material); 
    scene.add(line); 

Codepenで:https://codepen.io/anon/pen/evNqGy

関連する問題