개발 · 컴퓨터공학/three.js / / 2024. 10. 3. 11:35

three.js skybox 적용하기 [Threejs Cloth Tailor 개발일지]

728x90
반응형

    이전 포스팅 보러가기    

https://like-grapejuice.tistory.com/526

 

raycast 관련 문제도 고쳤겠다. 이제 기록을 남길 시나리오를 짜보자.

우선 색부터 좀 조정하도록 하자. 

배경색 변경 

우선 템플릿에서부터 사용했던 저 칙칙한 배경색 좀 바꾸자.

 

재밌는 점은 배경은 css로 구성되어있다는 점이다. 

배경을 skybox로 붙이고 싶은데, style.css 위에 덧붙이면 그냥 적용이 되려나.

three.js skybox 구현 

https://threejs.org/docs/#api/en/loaders/CubeTextureLoader

 

three.js docs

 

threejs.org

cube texture loader를 이용해서 

scene에 background로 texture를 적용하여 skybox 를 구현할 것이다.

 

이렇게 옷가게 skybox image를 적용하면 

 

skybox가 잘 적용되었다.

 

몇 가지 이미지를 더 넣어놓고, GUI로 변경할 수 있게 설정해놓자.

 

export function changeEnvironment(scene: Scene){
  const environmentsFolder = gui.addFolder('environments')

  environmentsFolder.add({environments: skyboxType[0]}, 'environments', skyboxType).onChange((val: SKYBOX)=>{
    changeSkyBox(scene, val)
  })
}
import * as THREE from "three";

const skyboxPath = '../../public/skybox/'
export type SKYBOX = 'clothing-store1' | 'clothing-store2' | 'clothing-store3' | 'tailor-shop'
export const skyboxType: SKYBOX[] = [    
  'clothing-store1',
  'clothing-store2',
  'clothing-store3',
  'tailor-shop',
]
// export let skyboxType: SKYBOX = 'clothing-store1'

export function initSkyBox(scene: THREE.Scene){
  const textureLoader = new THREE.CubeTextureLoader()
  textureLoader.load(
    [
      `${skyboxPath+skyboxType[0]}/0.png`, // 앞면
      `${skyboxPath+skyboxType[0]}/1.png`, // 뒷면
      `${skyboxPath+skyboxType[0]}/2.png`, // 위
      `${skyboxPath+skyboxType[0]}/3.png`, // 아래
      `${skyboxPath+skyboxType[0]}/4.png`, // 오른쪽
      `${skyboxPath+skyboxType[0]}/5.png`, // 왼쪽
    ],
    (texture)=>{
      scene.background = texture;
    }
  )
}

export function changeSkyBox(scene: THREE.Scene, type: SKYBOX){
  const textureLoader = new THREE.CubeTextureLoader()
  textureLoader.load(
    [
      `${skyboxPath+type}/0.png`, // 앞면
      `${skyboxPath+type}/1.png`, // 뒷면
      `${skyboxPath+type}/2.png`, // 위
      `${skyboxPath+type}/3.png`, // 아래
      `${skyboxPath+type}/4.png`, // 오른쪽
      `${skyboxPath+type}/5.png`, // 왼쪽
    ],
    (texture)=>{
      scene.background = texture;
    }
  )
}

gui로 skybox를 선택해서 변경할 수 있게 구현하였다.

728x90
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유