저는 ThreeJS를 사용하고 있습니다. 어떻게 마우스 클릭으로 객체 / 메시를 만들 수 있습니까? 현재 개체는 정확한 마우스 x 및 y 위치에 생성되지 않습니다.
var ge = new THREE.BoxBufferGeometry( 2, 2, 2 );
ge.scale(2, 2, 2);
var my = new THREE.MeshBasicMaterial( {
map: new THREE.TextureLoader().load( 'crate.gif' )
} );
ms = new THREE.Mesh( ge, my );
var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector2();
mouse.x = ( event.clientX / renderer.domElement.width ) * 2 - 1;
mouse.y = - ( event.clientY / renderer.domElement.height ) * 2 + 1;
raycaster.setFromCamera( mouse, camera );
ms.position.x=raycaster.ray.direction.x;
ms.position.y=raycaster.ray.direction.y;
ms.position.z=raycaster.ray.direction.z;
scene.add( ms );
나는 같은 문제가 있었다. raycaster.ray.position. (x | y | z) 값은 항상 -1과 1 사이입니다.
내가 얻은 몇 가지 테스트 후, 내가 생각하는 것은 당신이 원하는 것입니다. 한 방향을 정의해야합니다. 실제로 평면 오브젝트 (메시가 아님)를 만들어야합니다.
작동 방식은 다음과 같습니다.
var vec = raycaster.ray.intersectPlane(new THREE.Plane(new THREE.Vector3(0, 1, 0)));
여기서해야 할 일은 정의 된 평면에서 광선 교차를 얻는 것입니다. 비행기는 무한히 크고 보이지 않습니다. 또한 어떤 방향을 가리켜 야 하는지를 평면에 알려야합니다. 이 경우에는 (x = 0, y = 1, z = 0)이며 이는 기본적으로 거기에 누워 위쪽을 가리킴을 의미합니다.
그리고 다음과 함께 작동해야합니다.
ms.position.x=vec.x;
ms.position.y=vec.y;
ms.position.z=vec.z;
클릭하면 다음과 같은 결과가 나타납니다. (클릭시 빨간색 상자가 추가됨)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다