[Three.js] 마우스 커서를 이용한 객체 선택하기 

 

참고 : https://github.com/josdirksen/learning-threejs/blob/master/chapter-09/02-selecting-objects.html

josdirksen/learning-threejs

learning-threejs - Code repository for the examples from the Packt book "Learning Threejs"

github.com

한글로 주석 추가

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

 

        function onDocumentMouseDown(event) {
             //클릭된 마우스 커서를 vec3 좌표계로 전환(2차원 화면 좌표계)
            var vector = new THREE.Vector3(( event.clientX / window.innerWidth ) * 2 - 1, -( event.clientY / window.innerHeight ) * 2 + 1, 0.5);
            //vec3 화면 좌표계 형식을 Three.js scene 좌표계로 전환
            vector = vector.unproject(camera);
             //스크린상의 클릭한 점으로 부터 Three.js 3차원 좌표계에 광선을 보내기 위해서 THREE.Raycaster 객체 이용함
            var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());
             // 상기의 광선이 만나는 Three.js 객체를 선택하기 위해 사용
            var intersects = raycaster.intersectObjects([sphere, cylinder, cube]);
            if (intersects.length > 0) {
                console.log(intersects[0]);
                intersects[0].object.material.transparent = true;
                intersects[0].object.material.opacity = 0.1;
            }
        }


        function onDocumentMouseMove(event) {
            if (controls.showRay) {
                var vector = new THREE.Vector3(( event.clientX / window.innerWidth ) * 2 - 1, -( event.clientY / window.innerHeight ) * 2 + 1, 0.5);
                vector = vector.unproject(camera);
                var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());
                var intersects = raycaster.intersectObjects([sphere, cylinder, cube]);
                if (intersects.length > 0) {
                    var points = [];
                    //카메라의 위치
    points.push(new THREE.Vector3(-30, 39.8, 30));
                    //ray와 교차점의 위치
    points.push(intersects[0].point);

                    var mat = new THREE.MeshBasicMaterial({color: 0xff0000, transparent: true, opacity: 0.6});
                    var tubeGeometry = new THREE.TubeGeometry(new THREE.SplineCurve3(points), 60, 0.001);  //두개의 포인트를 이용한 스플라인, 세그먼트수, 반경
   //종전에 이미 튜브객체가 있다면 제거
                    if (tube) scene.remove(tube);  
   //튜브 메쉬 추가
                    if (controls.showRay) {
                        tube = new THREE.Mesh(tubeGeometry, mat);
                        scene.add(tube);
                    }
                }
            }
        }

 

 

 

 

 

[출처] http://blog.naver.com/PostView.nhn?blogId=mankeys&logNo=220386038306

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
54 javascript : js Array에서 한 원소 삭제 : JavaScript: Remove Element from an Array 졸리운_곰 2018.05.24 323
53 [자바스크립트] 동일한 단어를 문자열에서 찾기, match() 함수 file 졸리운_곰 2018.05.24 346
52 Javascript 함수 생성 2가지 방법의 차이점 file 졸리운_곰 2018.05.24 498
51 React 시작하기 [javascript] 졸리운_곰 2018.05.20 510
50 javascript 에서 큐, 스택, 트리 졸리운_곰 2018.02.27 514
49 CKEditor. Plugin 직접 만들기. 예: Cy-GistInsert file 졸리운_곰 2018.02.21 459
48 템플릿 엔진을 벗어나고 싶은 이유, React 와 Angular 2 사이의 갈등 중간 정리 졸리운_곰 2017.09.26 1354
47 [CSS 기초] DIV 태그를 이용하여 프레임 나누기 file 졸리운_곰 2017.08.25 496
46 jQuery 스타일 & 속성 다루기 file 졸리운_곰 2017.08.25 598
45 Cross-origin resource sharing file 졸리운_곰 2017.08.05 403
44 HTTP 접근 제어 (CORS) 졸리운_곰 2017.08.05 290
43 자바스크립트 문자열 비교 예제; 대소 문자 구분/구분 없이 졸리운_곰 2017.07.22 1287
42 [javascript] hashtable 같은 key=value 예제 졸리운_곰 2017.07.22 486
41 Three.js-Object-Rotation-with-Quaternion file 졸리운_곰 2017.07.08 435
40 Javascript [자바스크립트] 변수 선언과 유효범위 졸리운_곰 2017.07.08 583
39 remove-innerhtml-from-div 태그 안의 html코드 삭제 졸리운_곰 2017.07.08 633
38 HTML5 동영상 임베딩 졸리운_곰 2017.06.18 421
37 Javascript 문자열을 실수(부동소수점) 변수로 변환 가을의곰 2017.06.10 519
36 HTML div 왼쪽, 오른쪽 배치 가을의곰 2017.06.10 494
35 HTML DIV tag: 테두리 너비 지정하는 방법 - WIDTH : 픽셀(px) 또는 퍼센트(%) file 가을의곰 2017.06.10 827
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED