{"id":11784,"date":"2021-12-15T16:45:00","date_gmt":"2021-12-15T07:45:00","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=11784"},"modified":"2022-10-30T08:38:49","modified_gmt":"2022-10-29T23:38:49","slug":"%ec%9b%90%ed%95%98%eb%8a%94-%eb%a7%a4%ec%89%ac%ec%97%90-%eb%8c%80%ed%95%9c-%ec%97%90%eb%8b%88%eb%a9%94%ec%9d%b4%ec%85%98-zoomin-%ed%95%a8%ec%88%98","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=11784","title":{"rendered":"\uc6d0\ud558\ub294 \ub9e4\uc26c\uc5d0 \ub300\ud55c \uc5d0\ub2c8\uba54\uc774\uc158 ZoomIn \ud568\uc218"},"content":{"rendered":"<p>\uba3c\uc800 \uc0ac\uc6a9\ud558\ub294 \ud568\uc218\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. (\uc5d0\ub2c8\uba54\uc774\uc158\uc744 \uc704\ud558 GSAP \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\uc600\uc74c)<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\n_zoomFit(object3D, viewMode, bFront, viewAngle) {\r\n    const box = new THREE.Box3().setFromObject(object3D);\r\n    const sizeBox = box.getSize(new THREE.Vector3()).length();\r\n    const centerBox = box.getCenter(new THREE.Vector3());\r\n    \r\n    const offset = new THREE.Vector3(viewMode===\"X\"?1:0, viewMode===\"Y\"?1:0, viewMode===\"Z\"?1:0);\r\n    if(!bFront) offset.negate();\r\n    offset.applyAxisAngle(new THREE.Vector3(1,0,0), THREE.Math.degToRad(viewAngle));\r\n\r\n    const newPosition = new THREE.Vector3().copy(centerBox).add(offset);\r\n    const halfSizeModel = sizeBox * 0.5;\r\n    const halfFov = THREE.Math.degToRad(this._camera.fov * .5);\r\n    const distance = halfSizeModel \/ Math.tan(halfFov);\r\n    const direction = (new THREE.Vector3()).subVectors(newPosition, centerBox).normalize();\r\n    newPosition.copy(direction.multiplyScalar(distance).add(centerBox));\r\n\r\n    const oldPosition = this._camera.position.clone();\r\n    gsap.to(this._camera.position, { duration: 0.5, x: newPosition.x, y: newPosition.y, z: newPosition.z});\r\n\r\n    \/\/ camera.lookAt(centerBox.x, centerBox.y, centerBox.z); \/\/ OrbitControls\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc740 \uacbd\uc6b0\r\n    \/\/ this._controls.target.copy(centerBox); \/\/ OrbitControls\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\ub294 \uacbd\uc6b0\r\n    gsap.to(this._controls.target, { duration: 0.5,  \r\n        x: centerBox.x, y: centerBox.y, z: centerBox.z});        \r\n}\r\n<\/pre>\n<p>\uc0ac\uc6a9\uc740 \uc90c\uc778 \ub300\uc0c1\uc744 \ub9c8\uc6b0\uc2a4\ub85c \ud074\ub9ad\ud574 \uc120\ud0dd\ud55c\ub2e4\uace0 \ud560\ub54c.. \uba3c\uc800 RayCaster \uac1d\uccb4\ub97c \ud558\ub098 \uc815\uc758\ud558\uad6c\uc694.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\n_setupPicking() {\r\n    const raycaster = new THREE.Raycaster();\r\n    this._divContainer.addEventListener(\"click\", this._onClick.bind(this));\r\n    this._raycaster = raycaster;\r\n}\r\n<\/pre>\n<p>\ud074\ub9ad \uc774\ubca4\ud2b8\uc778 _onClick\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">\r\n_onClick(event) {\r\n    if(!event.ctrlKey) return false;\r\n    const width = this._divContainer.clientWidth;\r\n    const height = this._divContainer.clientHeight;\r\n    const xy = {x: (event.offsetX \/ width) * 2 - 1, y: -(event.offsetY \/ height) * 2 + 1};\r\n    this._raycaster.setFromCamera(xy, this._camera);\r\n    const targets = this._raycaster.intersectObjects(this._scene.children);\r\n    if(targets.length > 0) {\r\n        const mesh = targets[0].object;\r\n        this._zoomFit(mesh, \"Y\", true, 50);\r\n    }\r\n}\r\n<\/pre>\n<p>\uc774 \uc560\ub2c8\uba54\uc774\uc158 ZoomIn \uae30\ub2a5\uc744 \uc774\uc6a9\ud574 \ub9cc\ub4e0 \ub2e8\uc704 \uae30\ub2a5\uc5d0 \ub300\ud55c \uc608\uc81c \uc601\uc0c1\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><center><video autoplay=\"autoplay\" loop=\"loop\" controls=\"controls\" ><source src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2021\/12\/three.js_zoomIn.mp4\" \/>\ube44\ub514\uc624\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \uc6f9\ube0c\ub77c\uc6b0\uc838\uc785\ub2c8\ub2e4.<\/video><\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uba3c\uc800 \uc0ac\uc6a9\ud558\ub294 \ud568\uc218\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. (\uc5d0\ub2c8\uba54\uc774\uc158\uc744 \uc704\ud558 GSAP \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\uc600\uc74c) _zoomFit(object3D, viewMode, bFront, viewAngle) { const box = new THREE.Box3().setFromObject(object3D); const sizeBox = box.getSize(new THREE.Vector3()).length(); const centerBox = box.getCenter(new THREE.Vector3()); const offset = new THREE.Vector3(viewMode===&#8221;X&#8221;?1:0, viewMode===&#8221;Y&#8221;?1:0, viewMode===&#8221;Z&#8221;?1:0); if(!bFront) offset.negate(); offset.applyAxisAngle(new THREE.Vector3(1,0,0), THREE.Math.degToRad(viewAngle)); const newPosition = new THREE.Vector3().copy(centerBox).add(offset); const halfSizeModel = sizeBox * 0.5; const halfFov &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=11784\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;\uc6d0\ud558\ub294 \ub9e4\uc26c\uc5d0 \ub300\ud55c \uc5d0\ub2c8\uba54\uc774\uc158 ZoomIn \ud568\uc218&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[145,139,1],"tags":[],"class_list":["post-11784","post","type-post","status-publish","format-standard","hentry","category-three-js","category-webgl","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/11784","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=11784"}],"version-history":[{"count":6,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/11784\/revisions"}],"predecessor-version":[{"id":11791,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/11784\/revisions\/11791"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=11784"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=11784"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=11784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}