1

私は Google WebGL Globe を使用して作業を行っており、いくつかの初歩的な操作を実装しようとしています。その 1 つには、緯度、経度などによって生成されるバーをクリックすることが含まれます。

たくさんの three.js の例を調べた結果、答えはプロジェクターとレイで交差点を見つけることにあります。私が直面している問題は、他のいくつかのソースからわずかに調整された以下のコードにあります。

var projector = new THREE.Projector();

if (event.target == renderer.domElement) {
    var x = event.clientX;
    var y = event.clientY;
    var v = new THREE.Vector3((x/w)*2-1, -(y/h)*2+1, 0.5);
    projector.unprojectVector(v, camera);
    var ray = new THREE.Ray(camera.position, v.subSelf(camera.position).normalize());
    var intersects = ray.intersectObjects(scene.children);
    if (intersects.length > 0) {
      console.log("success");
    }
}

具体的には、「ray.intersectObjects は関数ではありません」というエラーです。

何か案は?前もって感謝します。

4

3 に答える 3

2

古いバージョンのライブラリを使用しているようです。r.52にアップデート。

于 2012-11-08T18:19:31.597 に答える
0

シーン オブジェクトを配列に追加して、以下のコードを試してください。

function onDocumentMouseDown( event ) {
            event.preventDefault();             
            var vector = new THREE.Vector3( 
                    ( event.clientX / window.innerWidth ) * 2 - 1, 
                    - ( event.clientY / window.innerHeight ) * 2 + 1, 
                    0.5 );

                projector.unprojectVector( vector, camera );
                var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );

                var intersects = ray.intersectObjects( objects );                                   

                if ( intersects.length > 0 ) {              
                    console.log("success");                 
                }                          

                document.addEventListener( 'mousemove', onDocumentMouseMove, false );
                document.addEventListener( 'mouseup', onDocumentMouseUp, false );
                document.addEventListener( 'mouseout', onDocumentMouseOut, false );


            mouseXOnMouseDown = event.clientX - windowHalfX;
            targetRotationOnMouseDown = targetRotation;
        }
于 2012-11-08T08:44:27.193 に答える