11

three.js で作成した 2 つの 3D オブジェクト「メッシュ」があります。これらのオブジェクトにクリック イベントを追加して、そのうちの 1 つをクリックすると拡大され、もう 1 つをクリックすると回転するようにします。

オブジェクトにクリック イベントを追加するためにこのメソッドを試しましたが、機能しません。

<script src='threex.domevent.js'> </script>
<script>

        var scene = new THREE.Scene();
        var camera = new THREE.PerspectiveCamera(20, window.innerWidth/window.innerHeight, 1, 1000);
        camera.position.z = 100;

        var renderer = new THREE.WebGLRenderer();
        renderer.setSize(window.innerWidth, window.innerHeight);
        document.body.appendChild(renderer.domElement);

        var geometry = new THREE.CubeGeometry(1,1,1);
        var material = new THREE.MeshBasicMaterial({color: 0x00ff00});
        var cube = new THREE.Mesh(geometry, material);
        scene.add(cube);

        cube.addEventListener( 'click',function(){cubeScale()} , false );

        function cubeScale()
            {
            cube.scale.x *= 20;
            }


        var render = function () {
            requestAnimationFrame(render);
            cube.rotation.y += 0.1;
            renderer.render(scene, camera);
        };

        render();

    </script>
4

3 に答える 3

0

pickingRay次のコードのように、正投影カメラでクリックを実行するために使用できます。

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

var rayCaster = projector.pickingRay(vector, camera);

var intersectedObjects = rayCaster.intersectObjects(scene.children, true);

unprojectVectorただし、パースペクティブ カメラをクリックする場合は、以下のようにクリックする必要があります。

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

var rayCaster = projector.unprojectVector(vector, camera);

var intersectedObjects = rayCaster.intersectObjects(objects);
于 2014-02-17T13:42:18.530 に答える