완성본
요새 THREE.JS의 사용법을 익히고 있다.
나는 3D 오브젝트를 소환하고 간단한 환경 수정 정도만 할 수 있는 초보인데 한가지 이미지의 텍스쳐가 아닌 정육면체를 6가지 이미지로 맵핑(+컨트롤 가능)을 하라는 미션이 떨어졌다.
직장인은 안되도 되게 해야한다.
three.js의 예제를 뒤져보자
https://threejs.org/examples/#webgl_geometry_cube
그나마 비슷한 샘플을 찾았다. 하지만 한 개의 나무 이미지 텍스쳐만 쓰였다는 것을 육안으로 그리고 코드로 알 수 있다.
..이게 아냐
구글링 갈겨~~~
출처: https://r105.threejsfundamentals.org/threejs/lessons/threejs-textures.html
발견!
three.js 예제에 위 출처의 코드를 응용해서
const texture를 없애고, const material의 {} 부분을 맵 6개로 변경했다.
나는 unsplash 이미지를 임의로 넣었지만 textures 폴더에 사용할 이미지를 옮겨놓고 사용하는게 좋을 것 같다.
const material = [
new THREE.MeshBasicMaterial({ map: new THREE.TextureLoader().load('https://images.unsplash.com/photo-1478098711619-5ab0b478d6e6?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2070&q=80') }),
new THREE.MeshBasicMaterial({ map: new THREE.TextureLoader().load('https://images.unsplash.com/photo-1574158622682-e40e69881006?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2080&q=80') }),
new THREE.MeshBasicMaterial({ map: new THREE.TextureLoader().load('https://images.unsplash.com/photo-1615111784767-4d7c527f32a1?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1974&q=80') }),
new THREE.MeshBasicMaterial({ map: new THREE.TextureLoader().load('https://images.unsplash.com/photo-1606214174585-fe31582dc6ee?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1974&q=80') }),
new THREE.MeshBasicMaterial({ map: new THREE.TextureLoader().load('https://images.unsplash.com/photo-1596854273338-cbf078ec7071?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2080&q=80') }),
new THREE.MeshBasicMaterial({ map: new THREE.TextureLoader().load('https://images.unsplash.com/photo-1520315342629-6ea920342047?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=2080&q=80') })
]
+ OrbitControls를 추가하는 방법
three 모듈 아래에
import { OrbitControls } from './jsm/controls/OrbitControls.js';
를 추가하고,
let camera, scene, renderer 사이에 controls를 추가한다.
그리고 function init() 내에
controls = new OrbitControls(camera, renderer.domElement);
controls.autoRotate = true;
위의 코드를 추가한다. autoRotate를 true로 설정하면 오브젝트가 자동으로 회전한다.
마지막으로 function animate() 내에
controls.update();
를 추가
orbitControls까지 추가한 완성본
See the Pen THREE.JS multiple images on BoxGeometry by nah (@wimmwell) on CodePen.
'Front-end' 카테고리의 다른 글
[jQuery] 가로 스크롤 탭 메뉴 만들기 (0) | 2022.09.27 |
---|---|
[React] 리액트로 Three.js 작업하기 기본 (3D 박스 구현) (0) | 2022.07.25 |
[HTML/CSS] 테이블 thead에 border-radius 들어간 CSS 적용하기 (0) | 2022.07.20 |
[Javascript] 간단한 데이터 필터링 탭 메뉴 (forEach, dataset) (0) | 2022.07.14 |
[javascript] 체크박스 클릭으로 selectbox의 disabled 속성 추가/제거하기 (0) | 2022.04.25 |