Three.js · 01 장면 그래프와 카메라
단계: 장면 좌표·카메라·기하 · 편집 가능한 예제 · 저장 ID: threejs-01
목표와 학습 후 역량
- local과 world 좌표 변화를 출력한다.
- FOV와 카메라 이동의 효과를 구별한다.
선수 지식
JavaScript ES 모듈, 벡터·행렬 기초와 WebGL 첫 장면을 이해해야 합니다.
핵심 개념과 설명
부모 변환
Group의 변환은 자식의 world 좌표에 누적됩니다. 자식 position은 부모 기준이므로 화면 위치와 같은 값이 아닙니다.
시선과 위치
카메라 위치와 바라보는 지점은 서로 다른 값입니다. FOV를 바꾸면 위치를 고정해도 투영 크기가 변합니다.
실습 준비
기존 내장 예제는 출발점만 제공합니다. 확장 요구사항 전체가 구현된 예제가 아니며 별도 로컬 HTTP 개발 서버의 HTML·ES 모듈 프로젝트에서 직접 구현합니다. three와 addons를 같은 설치 버전으로 고정하고 기록하세요.
연결된 예제는 출발점입니다. 아래 과제 전체가 완성된 코드는 아니며, 예제의 지원 범위를 넘는 작업은 별도 프로젝트에서 수행하세요.
실습 과제
- 외부 실습 프로젝트의 day-01.js와 index.html을 준비하세요. 기존 threejs-01의 Group에 두 Mesh를 넣고 AxesHelper를 추가하세요.
- 부모 회전과 카메라 FOV를 입력받아 getWorldPosition 결과를 HTML output에 표시하세요.
- 입력 조건 0에서 출력을 저장한 뒤 PI/2 조건으로 다시 실행하세요. 예상: 자식 local 좌표는 같아도 world 좌표는 회전합니다. 실제 화면·로그와 대조하고 day-01-notes.md에 실제 결과와 차이의 원인을 남기세요.
관찰할 변수
| 변수 | 기준 조건 | 바꿀 조건 | 예상할 변화·검증 가설 |
|---|---|---|---|
| 부모 회전 | 0 | PI/2 | 자식 local 좌표는 같아도 world 좌표는 회전합니다 |
표의 예상은 측정 결과가 아닙니다. 한 번에 한 조건만 바꾸고 실제 결과가 다르면 원인을 기록하세요.
완료 조건
- local과 world 좌표 변화를 출력한다.
- FOV와 카메라 이동의 효과를 구별한다.
자가 점검
- 부모만 이동했는데 자식 position이 그대로인 이유는 무엇인가요?
- lookAt과 position은 어떻게 다른가요?
공식 참고
연결된 예제와 실행 범위
원본 코드·기록은 자동으로 덮어쓰지 않습니다. 기존 예제를 초기화할 때도 필기는 유지됩니다.