SlideShare a Scribd company logo
1 of 50
Transform
NHN NEXT 장문익
Geometric Transform(기하 변환)
 Scaling transform(크기 변환)
 Rotation transform(회전 변환)
 Translation Transform(이동 변환)
D3D와 왼손 좌표계
 D3D는 왼손 좌표계를 사용하기 때문에 (행 벡터) * (행렬)로 transfor을 수행한다.
 OpenGL은 오른손 좌표계를 사용하기 때문에 (행렬) * (열 벡터)로 transform을 수행한다.
Geometic Transfrom의 예
Geometric Transform을 한 번에
 Geometry Transform을 Scalling, Rotation, Translation 과정을 각각 거치지 않고 단 하나의 행렬
로 처리할 수 있다.
 하나의 행렬로 처리하기 위해서는 3차원 벡터를 4차원 동차 좌표(Homo generous Coordinate)로
바꾸어야 한다.
 4차원 동차 좌표의 예시: (1, 2, 3, 4), (2, 4, 6, 8), (0.5, 1, 1.5 ,2)
4차원 동차 좌표
 4차원에서 두 개의 좌표가 동차 좌표가 되려면 ‘벡터 a = k * 벡터 b’ 관계가 성립되면 된다.
 이 관계를 이용해서 3차원 좌표 (x, y, z)는 4차원 동차 좌표에서 무수히 많은 좌표를 가질 수 있다.
 이들 중에서 특별히 마지막 w 값이 1인 동차 좌표를 사용한다.
 3차원 좌표 (x, y, z) -> 4차원 동차 좌표 (x, y, z, 1)
 4차원 좌표 변환에 행렬을 이용할 경우 4x4 행렬이 필요하고, 변환한 후에 w값으로 x, y, z, w를 나누
어서 항상 w = 1이 되도록 만든다.
4차원 동차좌표 활용한 geometric transform
4차원 동차좌표 활용한 geometric transform
 이것을 3차원 좌표 (x’, y’, z’)로 하면 scaling,
rotation, translation에 대해서 하나의 행렬로
대치가 가능하다.
Translation Transform
 translation transform은 vertex의 평행 이동
을 의미한다.
 vertex의 평행 이동은 vertex의 위치를 상대적
으로 이동하는 것이다.
Translation Transform 수식 표현
벡터 T에 대한 Translation Transform matrix
Translation Transform matrix의 역행렬
 벡터 T의 반대 방향으로 변환하는 행렬
D3D Translation Transform 함수
Scaling Transform
 Scaling Transform은 vertex의 위치에 scalar
배를 적용한 것이다.
 Translation Transform과 마찬가지로 4x4 변
환 행렬로 구성할 수 있다.
Scaling Transform 수식 표현
벡터 S에 대한 Scaling Translation matrix
Scaling Translation matrix의 역행렬
D3D Scaling Transform 함수
Rotation Transform
 Euler Angle을 이용한 방법
 임의의 축에 대한 회전(임의의 축에 대한 최전은 Quaternion(사원수)로 풀 수 있다.
2차원에서 정점의 회전
2차원에서의 정점 이동 수식 표현
2차원에서 정점의 회전 이동 행렬
D3D에서 사용할 수 있는 회전 행렬로 바꾸기
 (벡터) * (행렬) 형태로 바꿔야 한다.
 바꾸는 방법은 전치 행렬
3차원에서 Rotation Transform matrix(x축)
3차원에서 Rotation Transform matrix(y축)
3차원에서 Rotation Transform matrix(z축)
Rotation Transform matrix의 역행렬
 각도를 –각도로 적용해주면 된다.
 모든 회전 행렬은 직교 행렬이므로 역행렬과 전치행렬이 동일하다.
 연산 속도는 – 각도를 적용하는 것보다는 전치시키는 것이 더 빠르다.
D3D Rotation Transform 함수
 D3DXMatrixRotationX()
 D3DXMatrixRotationY()
 D3DXMatrixRotationZ()
Euler Angle
 각 축에 대한 행렬을 연속으로 곱해서 최종 회전 행렬을 만들 때 그 각도를 말한다.
D3D Rotation Transform
 D3D는 x, z축을 평면으로, y축을 하늘 방향으
로 지시하는 형태이다.
 D3D Rotation Transform은 y축, x축, z축 순
서로 회전한다.
 y축 회전은 Yaw
 x축 회전은 Pitch
 z축 회전은 Roll
Euler Angle로 구한 Rotation Transform matrix
D3D Euler Angle에 대한 Rotation Transform 함수
Gimbal Lock
 Euler Angle는 적용하기는 쉽지만 모든 오브젝트가 이 방법대로 움직이지 않는다는 문제가 발생한
다.
 Gimbal Lock은 회전에서 그 곱의 순서를 알고 있지 않다면 전혀 다른 행렬을 만들어 다른 위치로
이동할 수 있다는 것이다.
 Gimbal Lock을 해결하기 위해서는 회전 각도를 누적시키는 것이 아니라 임의의 축에 대해서 회전
행렬을 만들고 이 회전 행렬을 계속 곱해야만 해결이 된다.
임의의 축에 대한 회전
 임의의 점 벡터 P가 단위 벡터 n에 대해서 회전한 점 벡터
임의의 축에 대한 회전
DXD 임의의 축에 대한 회전 행렬 함수
 D3DXMATRIX* WINAPI D3DXMatrixRotationAxis
( D3DMATRIX * pOut, CONST D3DXVECTOR3 *pV, FLOAT Angle );
QUATERNION
 사원수
 복소수 표현을 확장하기 위해서 만들어졌다.
 벡터 해석보다 사용이 난해하여 잘 사용되지 않다가 3D 프로그램에서 회전에 자주 사용된다.
 벡터를 활용하여 임의의 축에 대한 회전을 구할 수가 있지만, QUATERNION을 사용하면 벡터로 구
한 결과보다 간결하고, C++의 Overloading을 적용하면 프로그램을 구현하기가 쉬워진다.
복소수와 QUATERNION
 Real Number + Imaginary Number
 2 + 3i
 a + bi
 Real Number + 3개의 Imaginary Number
 단위벡터 v는 회전 축
 단위벡터 I, j, k는 좌표 축의 단위 벡터
Quarternian의 좌표 축 단위벡터 성질 정의
QUATERNION Conjuagate
 복소수처럼 켤레복소수가 있다.
QUATERNION의 크기
Quaternion 곱셈
Quaternion 연산 법칙
QUATERNION과 Translation

임의의 축에 대한 회전과 QUATERNION의 곱
셈
QUATERNION을 이용한 회전1
 임의의 축(Axis)과 각도를 QUATERNION으로 바꾼다. 이 때 각도는 ‘1/2’로 한다.
QUATERNION을 이용한 회전2
 회전을 적용할 정점을 QUATERNION으로 바꾼다.
QUATERNION을 이용한 회전3
 QUATERNION 곱 q*P*q-1 연산을 수행한다.(D3D는 왼손 좌표계이기 때문에 q-1*P*q 순으로 곱한
다.)
QUATERNION을 이용한 회전4
 최종 연산의 결과도 QUATERNION이므로 이중에서 허수 부를 선택한다.
참고자료
 http://3dapi.com/

More Related Content

Similar to 3D Graphics Transform

GameMath-Chapter 04 사원수
GameMath-Chapter 04 사원수GameMath-Chapter 04 사원수
GameMath-Chapter 04 사원수Mark Choi
 
02.선형변환과 행렬
02.선형변환과 행렬02.선형변환과 행렬
02.선형변환과 행렬JaeHong Park
 
[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2jdo
 
Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2Thisisone Lee
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)QooJuice
 
컴퓨터 그래픽스 2015-2019년 기말시험
컴퓨터 그래픽스 2015-2019년 기말시험컴퓨터 그래픽스 2015-2019년 기말시험
컴퓨터 그래픽스 2015-2019년 기말시험Lee Sang-Ho
 
05_벡터와 매트릭스
05_벡터와 매트릭스05_벡터와 매트릭스
05_벡터와 매트릭스noerror
 
GameMath-Chapter 09 가시성판단
GameMath-Chapter 09 가시성판단GameMath-Chapter 09 가시성판단
GameMath-Chapter 09 가시성판단Mark Choi
 
프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2HyeonSeok Choi
 

Similar to 3D Graphics Transform (12)

점, 선, 면
점, 선, 면점, 선, 면
점, 선, 면
 
GameMath-Chapter 04 사원수
GameMath-Chapter 04 사원수GameMath-Chapter 04 사원수
GameMath-Chapter 04 사원수
 
02.선형변환과 행렬
02.선형변환과 행렬02.선형변환과 행렬
02.선형변환과 행렬
 
[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2[컴퓨터비전과 인공지능] 6. 역전파 2
[컴퓨터비전과 인공지능] 6. 역전파 2
 
Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2Chapter 2, 선형 변환과 행렬 1/2
Chapter 2, 선형 변환과 행렬 1/2
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)
 
컴퓨터 그래픽스 2015-2019년 기말시험
컴퓨터 그래픽스 2015-2019년 기말시험컴퓨터 그래픽스 2015-2019년 기말시험
컴퓨터 그래픽스 2015-2019년 기말시험
 
픽킹
픽킹픽킹
픽킹
 
픽킹
픽킹픽킹
픽킹
 
05_벡터와 매트릭스
05_벡터와 매트릭스05_벡터와 매트릭스
05_벡터와 매트릭스
 
GameMath-Chapter 09 가시성판단
GameMath-Chapter 09 가시성판단GameMath-Chapter 09 가시성판단
GameMath-Chapter 09 가시성판단
 
프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2프로그래머를위한선형대수학1.2
프로그래머를위한선형대수학1.2
 

More from 문익 장

Mec chapter 5,6
Mec chapter 5,6Mec chapter 5,6
Mec chapter 5,6문익 장
 
Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4문익 장
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8문익 장
 
More effective c++ chapter1,2
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2문익 장
 
Tcp server / client
Tcp server / clientTcp server / client
Tcp server / client문익 장
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)문익 장
 
삼각형으로 지면 만들기
삼각형으로 지면 만들기삼각형으로 지면 만들기
삼각형으로 지면 만들기문익 장
 
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)문익 장
 
Direct3d overview
Direct3d overviewDirect3d overview
Direct3d overview문익 장
 
Effective c++(chapter3,4)
Effective c++(chapter3,4)Effective c++(chapter3,4)
Effective c++(chapter3,4)문익 장
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
 

More from 문익 장 (15)

Mec chapter 5,6
Mec chapter 5,6Mec chapter 5,6
Mec chapter 5,6
 
Mec++ chapter3,4
Mec++ chapter3,4Mec++ chapter3,4
Mec++ chapter3,4
 
Effective c++ chapter 7,8
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8
 
More effective c++ chapter1,2
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2
 
Std bind
Std bindStd bind
Std bind
 
Winsock
WinsockWinsock
Winsock
 
C++ align
C++ alignC++ align
C++ align
 
Alignment
AlignmentAlignment
Alignment
 
Tcp server / client
Tcp server / clientTcp server / client
Tcp server / client
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)
 
삼각형으로 지면 만들기
삼각형으로 지면 만들기삼각형으로 지면 만들기
삼각형으로 지면 만들기
 
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
소켓 주소 구조체 다루기(윈도우 네트워크 프로그래밍)
 
Direct3d overview
Direct3d overviewDirect3d overview
Direct3d overview
 
Effective c++(chapter3,4)
Effective c++(chapter3,4)Effective c++(chapter3,4)
Effective c++(chapter3,4)
 
Effective c++ Chapter1,2
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
 

3D Graphics Transform