본문 바로가기
Front-End/ThreeJS

Object3D Hierarchy

by 두두리안 2023. 7. 24.
728x90

Object3D는 Three.js의 많은 개체에 대한 기본 클래스로 3D 공간에서 개체를 조작하기 위한 메서드와 속성을 제공한다

 

가장 일반적인 ex) 메쉬, 조명, 카메라 및 Object3D 이다

https://threejs.org/docs/#api/en/core/Object3D

 

three.js docs

 

threejs.org

 

장면에 다른 Object3D 추가할수 있으면 부모 Object3D의 add() 메소드를 통해서 자식 Object3D를 만들수 있다

const object1 = new THREE.Mesh(
    new THREE.SphereGeometry(),
    new THREE.MeshPhongMaterial({ color: 0xff0000 }) // 빨강
)
object1.position.set(4, 0, 0)
scene.add(object1) //부모 object1

const object2 = new THREE.Mesh(
    new THREE.SphereGeometry(),
    new THREE.MeshPhongMaterial({ color: 0x00ff00 }) // 초록
)
object2.position.set(4, 0, 0)
object1.add(object2) // 부모 object1 의 자식 object2 넣어준다

const object3 = new THREE.Mesh(
    new THREE.SphereGeometry(),
    new THREE.MeshPhongMaterial({ color: 0x0000ff }) // 파랑
)
object3.position.set(4, 0, 0)
object2.add(object3) // 부모 object2 의 자식 object3 넣어준다
scene
    |--object1 (Red Ball)
             |--object2 (Green Ball)
                       |--object3 (Blue Ball)
  • 빨간공에 대한 변경은 녹색공, 파란공의 영향을 미친다.
  • 녹색공의 변경은 파란공의 영향을 미치지만 부모인 빨간공에 영향을 안미친다.
  • 파란공의 변경은 부모공의 영향을 미치지 않는다

 

  • 위치, 회전/쿼터니언 및 크기조정 같은 Object3D 변환을 가져오면 Local 공간의 값이 반환 된다
  • Object3D 자식인 경우 월드 변환 값은 부모,조부모의 변환도 고려한다
obj.position // values are local transform
obj.rotation // values are local transform
obj.quaternion // values are local transform
obj.scale // values are local transform

 

Object3D의 월드 변환을 얻으려면?

const objectsWorldPosition = new THREE.Vector3() 
object.getWorldPosition(objectsWorldPosition) // values are world transform

const objectsWorldDirection = new THREE.Vector3()
object.getWorldDirection(objectsWorldDirection) // values are world transform

const objectsWorldQuaternion = new THREE.Quaternion()
object.getWorldQuaternion(objectsWorldQuaternion) // values are world transform

const objectsWorldScale = new THREE.Vector3()
object.getWorldScale(objectsWorldScale) // values are world transform

 

 

728x90

'Front-End > ThreeJS' 카테고리의 다른 글

threejs scaling-performance  (1) 2023.10.23
Geometries  (0) 2023.07.25
Dat GUI  (0) 2023.07.21
ThreeJS 시작하기  (0) 2023.07.20
PerspectiveCamera vs OrthographicCamera  (0) 2023.07.19