🔄 합성 변환: 고정점을 기준으로 회전하기
지금까지 우리는 주로 원점(0, 0)을 기준으로 한 회전만 다뤄왔습니다.
하지만 실제 그래픽스에서는 임의의 점, 예를 들어 (1, 1) 같은 점을 기준으로 물체를 회전시켜야 할 일이 자주 발생합니다.
이때 단순히 회전 행렬만 사용하는 것으로는 원하는 결과를 얻을 수 없습니다. 왜 그런지, 그리고 어떻게 해결하는지 차근차근 예시와 함께 살펴보겠습니다.
❌ 첫 번째 시도: 그냥 회전만 하기 (잘못된 결과)
아래는 점 (1, 1)을 기준으로 도형(삼각형)을 90도 회전시키고 싶은 상황입니다.

이때 단순히 위와 같은 회전 행렬을 적용했다면:
이 행렬은 원점(0, 0) 을 기준으로 90도 회전시키는 행렬입니다. 따라서 삼각형은 회전은 하지만, 원점 기준으로 도는 것이기 때문에 회전 중심인 (1, 1)에서 벗어나버리게 됩니다.
👉 결국, 도형의 위치는 의도하지 않은 곳으로 이동하게 되며, 회전 효과는 왜곡됩니다.
(1, 1)은 여전히 제자리인데, 삼각형은 뚝 떨어진 곳에 있게 되는 거죠.
✅ 두 번째 시도: 합성 변환으로 정확한 회전 구현하기
이번에는 정말로 (1, 1) 을 기준으로 회전시키고자 합니다.
이를 위해서는 세 단계의 변환을 합성해야 합니다.
![두 번째 슬라이드]
- 도형을 원점으로 이동
→ (1, 1)을 원점으로 옮기기 위해(−1, −1)
만큼 이동

- 원점 기준으로 회전
→ 일반적인 90도 회전 행렬 사용

- 도형을 다시 원래 위치로 이동
→(1, 1)
만큼 이동시켜 원래 중심으로 복귀

🔁 세 행렬을 합성하면:

이렇게 합성된 하나의 행렬을 이용하면 도형은 정확히 (1, 1) 을 중심으로 회전하게 됩니다.
💡 시각적으로 요약하면:
단계 | 설명 | 도형 변화 |
---|---|---|
① | (1, 1)을 원점으로 이동 | 도형이 왼쪽 아래로 밀림 |
② | 원점 기준 회전 | 도형이 제자리에서 회전 |
③ | 다시 (1, 1)으로 복귀 | 회전한 모양 그대로 제자리로 돌아옴 ✅ |
🔄 합성 변환: 고정점을 기준으로 한 스케일(확대/축소)
앞에서 배운 기본 스케일 행렬은 모두 원점(0, 0) 을 기준으로 확대나 축소가 이루어졌습니다. 하지만 실제 그래픽스에서는 어떤 도형을 특정한 위치—예를 들어 (1, 1)—를 중심으로 스케일해야 하는 경우가 자주 있습니다.
하지만!
단순히 스케일 행렬만 적용해서는 절대 원하는 결과를 얻을 수 없습니다.
아래 예시를 통해 왜 그런지, 어떻게 해결해야 하는지 단계적으로 살펴보겠습니다.
❌ 첫 번째 시도: 단순 스케일 적용 (실패)

위 그림에서는 삼각형을 점 (1, 1)을 기준으로 스케일하고 싶었지만,
기본 스케일 행렬

만 적용했습니다. 이 행렬은 무조건 원점을 기준으로 도형을 x축 방향으로 2배, y축 방향으로 3배 확장합니다.
그래서 도형은 원점에서 멀어지며 기준점인 (1, 1) 주변에서 스케일되지 않고, 도형의 위치가 어긋난 결과가 발생합니다. 😢
✅ 두 번째 시도: 합성 변환으로 해결 (성공)

정확히 (1, 1) 을 중심으로 스케일하려면, 세 단계를 거쳐야 합니다:
- 도형을 (1, 1) → 원점으로 이동
- 이동 행렬 ( T(-1, -1) )
- 원점 기준으로 스케일 적용
- 스케일 행렬 ( S(2, 3) )
- 다시 (1, 1) 위치로 되돌리기
- 이동 행렬 ( T(1, 1) )
이 세 가지 변환을 합성하면 다음과 같은 행렬 곱이 됩니다:

이 합성 행렬을 도형에 적용하면, 도형은 정확히 (1, 1) 을 중심으로 x축 방향으로 2배, y축 방향으로 3배 스케일됩니다. 🎉
📈 시각적 정리
단계 | 설명 | 도형의 위치 변화 |
---|---|---|
① | (1, 1)을 원점으로 옮김 | 도형이 왼쪽 아래로 이동 |
② | 원점 기준 스케일 | 도형이 정확히 스케일됨 |
③ | (1, 1) 위치로 복귀 | 도형이 원래 자리에서 확대된 상태로 복귀 ✅ |
🔁 합성 변환의 해석: 전역 vs 지역 좌표계의 차이
🎯 주어진 변환

이건 두 가지 변환을 합친 합성 행렬입니다:
- 먼저 회전 R(-90°) : -90도 회전 (시계 방향)
- 이후 이동 T(2, 0): 오른쪽으로 2만큼 이동

📌 해석 1: 전역 좌표계 기준 (객체 변환 해석)

순서
- 먼저 점 ( p )에 회전 행렬을 적용: R(-90°)p
- 그 결과에 다시 이동 행렬을 적용: T(2, 0)R(-90°)p
의미
- 좌표계는 그대로 고정되어 있고,
- 도형(객체) 자체가 움직이고 있는 것처럼 해석됩니다.
- 실제로는 먼저 도형이 회전하고, 그다음 위치를 옮긴다고 보면 됩니다.
결과
- 도형이 회전한 후 오른쪽으로 이동된 새로운 위치에 나타납니다.
- 그림에서도 파란 도형이 회전 후 붉은 도형으로 바뀌는 것을 확인할 수 있습니다.
📌 해석 2: 지역 좌표계 기준 (좌표계 변환 해석)

이번에는 같은 수식 X = T(2, 0)R(-90°)를
“좌표계 자체를 변형한다”는 관점으로 봅니다.
순서
- 기준 좌표계를 먼저 이동: T(2, 0)
- 그 좌표계를 다시 회전: R(-90°)
- 새로운 좌표계 위에 점 p를 배치
수식은 같지만,
이번에는 p는 새로운 좌표계에서의 좌표로 해석되고,
그 좌표계를 다시 전역 좌표계로 변환하는 과정이 되는 겁니다.
의미
- 도형은 가만히 있고,
- 좌표계가 움직이는 것처럼 해석합니다.
- 좌표계가 회전 → 이동한 상태에서, 그 좌표계 기준으로 p를 배치함.
🧠 둘의 차이 정리
구분 | 전역 좌표계 해석 | 지역 좌표계 해석 |
---|---|---|
기준 | 좌표계는 고정, 도형이 움직임 | 도형은 고정, 좌표계가 움직임 |
해석 방식 | 도형에 연달아 변환을 적용 | 좌표계를 변형한 후 도형을 배치 |
적용 대상 | p는 기존 좌표계 기준 좌표 | p는 새 좌표계 기준 좌표 |
해석 결과 | 도형이 회전 + 이동됨 | 좌표계 회전 + 이동 후 도형 위치 계산 |
✅ 왜 중요한가요?
OpenGL, 로봇공학, 물리 시뮬레이션 등에서는
이 두 해석 중 어느 쪽을 쓰느냐에 따라 수식의 순서와 의미가 완전히 달라집니다.
예를 들어:
- 전역 좌표계 해석은 도형을 “움직인다”고 생각하는 경우 (예: 실제 모델 이동)
- 지역 좌표계 해석은 도형이 “어디에 위치할지”를 기준 좌표계로 바꾸는 경우 (예: 카메라 좌표계 변환)
'프로그래밍 > 컴퓨터그래픽스' 카테고리의 다른 글
GLUT 콜백 함수 정리 (0) | 2025.04.05 |
---|---|
OpenGL에서 기하 변환의 처리 (0) | 2025.04.05 |
어파인 변환의 해석 (0) | 2025.04.05 |
동차 좌표, 어파인 공간, 어파인 변환: 이동, 회전, 스케일, 밀림 변환 (0) | 2025.04.04 |
OpenGL 기본 출력 객체 속성 정리 (0) | 2025.04.04 |