Top Banner
Transform NHN NEXT 장문익
50

3D Graphics Transform

Jul 21, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 3D Graphics Transform

Transform

NHN NEXT 장문익

Page 2: 3D Graphics Transform

Geometric Transform(기하 변환)

Scaling transform(크기 변환)

Rotation transform(회전 변환)

Translation Transform(이동 변환)

Page 3: 3D Graphics Transform

D3D와 왼손 좌표계

D3D는 왼손 좌표계를 사용하기 때문에 (행 벡터) * (행렬)로 transfor을 수행한다.

OpenGL은 오른손 좌표계를 사용하기 때문에 (행렬) * (열 벡터)로 transform을 수행한다.

Page 4: 3D Graphics Transform

Geometic Transfrom의 예

Page 5: 3D Graphics Transform

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)

Page 6: 3D Graphics Transform

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이 되도록 만든다.

Page 7: 3D Graphics Transform

4차원 동차좌표 활용한 geometric transform

Page 8: 3D Graphics Transform

4차원 동차좌표 활용한 geometric transform

이것을 3차원 좌표 (x’, y’, z’)로 하면 scaling,

rotation, translation에 대해서 하나의 행렬로

대치가 가능하다.

Page 9: 3D Graphics Transform

Translation Transform

translation transform은 vertex의 평행 이동

을 의미한다.

vertex의 평행 이동은 vertex의 위치를 상대적

으로 이동하는 것이다.

Page 10: 3D Graphics Transform

Translation Transform 수식 표현

Page 11: 3D Graphics Transform

벡터 T에 대한 Translation Transform matrix

Page 12: 3D Graphics Transform

Translation Transform matrix의 역행렬

벡터 T의 반대 방향으로 변환하는 행렬

Page 13: 3D Graphics Transform

D3D Translation Transform 함수

Page 14: 3D Graphics Transform

Scaling Transform

Scaling Transform은 vertex의 위치에 scalar

배를 적용한 것이다.

Translation Transform과 마찬가지로 4x4 변

환 행렬로 구성할 수 있다.

Page 15: 3D Graphics Transform

Scaling Transform 수식 표현

Page 16: 3D Graphics Transform

벡터 S에 대한 Scaling Translation matrix

Page 17: 3D Graphics Transform

Scaling Translation matrix의 역행렬

Page 18: 3D Graphics Transform

D3D Scaling Transform 함수

Page 19: 3D Graphics Transform

Rotation Transform

Euler Angle을 이용한 방법

임의의 축에 대한 회전(임의의 축에 대한 최전은 Quaternion(사원수)로 풀 수 있다.

Page 20: 3D Graphics Transform

2차원에서 정점의 회전

Page 21: 3D Graphics Transform

2차원에서의 정점 이동 수식 표현

Page 22: 3D Graphics Transform

2차원에서 정점의 회전 이동 행렬

Page 23: 3D Graphics Transform

D3D에서 사용할 수 있는 회전 행렬로 바꾸기

(벡터) * (행렬) 형태로 바꿔야 한다.

바꾸는 방법은 전치 행렬

Page 24: 3D Graphics Transform

3차원에서 Rotation Transform matrix(x축)

Page 25: 3D Graphics Transform

3차원에서 Rotation Transform matrix(y축)

Page 26: 3D Graphics Transform

3차원에서 Rotation Transform matrix(z축)

Page 27: 3D Graphics Transform

Rotation Transform matrix의 역행렬

각도를 –각도로 적용해주면 된다.

모든 회전 행렬은 직교 행렬이므로 역행렬과 전치행렬이 동일하다.

연산 속도는 – 각도를 적용하는 것보다는 전치시키는 것이 더 빠르다.

Page 28: 3D Graphics Transform

D3D Rotation Transform 함수

D3DXMatrixRotationX()

D3DXMatrixRotationY()

D3DXMatrixRotationZ()

Page 29: 3D Graphics Transform

Euler Angle

각 축에 대한 행렬을 연속으로 곱해서 최종 회전 행렬을 만들 때 그 각도를 말한다.

Page 30: 3D Graphics Transform

D3D Rotation Transform

D3D는 x, z축을 평면으로, y축을 하늘 방향으

로 지시하는 형태이다.

D3D Rotation Transform은 y축, x축, z축 순

서로 회전한다.

y축 회전은 Yaw

x축 회전은 Pitch

z축 회전은 Roll

Page 31: 3D Graphics Transform

Euler Angle로 구한 Rotation Transform matrix

Page 32: 3D Graphics Transform

D3D Euler Angle에 대한 Rotation Transform 함수

Page 33: 3D Graphics Transform

Gimbal Lock

Euler Angle는 적용하기는 쉽지만 모든 오브젝트가 이 방법대로 움직이지 않는다는 문제가 발생한

다.

Gimbal Lock은 회전에서 그 곱의 순서를 알고 있지 않다면 전혀 다른 행렬을 만들어 다른 위치로

이동할 수 있다는 것이다.

Gimbal Lock을 해결하기 위해서는 회전 각도를 누적시키는 것이 아니라 임의의 축에 대해서 회전

행렬을 만들고 이 회전 행렬을 계속 곱해야만 해결이 된다.

Page 34: 3D Graphics Transform

임의의 축에 대한 회전

임의의 점 벡터 P가 단위 벡터 n에 대해서 회전한 점 벡터

Page 35: 3D Graphics Transform

임의의 축에 대한 회전

Page 36: 3D Graphics Transform

DXD 임의의 축에 대한 회전 행렬 함수

D3DXMATRIX* WINAPI D3DXMatrixRotationAxis

( D3DMATRIX * pOut, CONST D3DXVECTOR3 *pV, FLOAT Angle );

Page 37: 3D Graphics Transform

QUATERNION

사원수

복소수 표현을 확장하기 위해서 만들어졌다.

벡터 해석보다 사용이 난해하여 잘 사용되지 않다가 3D 프로그램에서 회전에 자주 사용된다.

벡터를 활용하여 임의의 축에 대한 회전을 구할 수가 있지만, QUATERNION을 사용하면 벡터로 구

한 결과보다 간결하고, C++의 Overloading을 적용하면 프로그램을 구현하기가 쉬워진다.

Page 38: 3D Graphics Transform

복소수와 QUATERNION

Real Number + Imaginary Number

2 + 3i

a + bi

Real Number + 3개의 Imaginary Number

단위벡터 v는 회전 축

단위벡터 I, j, k는 좌표 축의 단위 벡터

Page 39: 3D Graphics Transform

Quarternian의 좌표 축 단위벡터 성질 정의

Page 40: 3D Graphics Transform

QUATERNION Conjuagate

복소수처럼 켤레복소수가 있다.

Page 41: 3D Graphics Transform

QUATERNION의 크기

Page 42: 3D Graphics Transform

Quaternion 곱셈

Page 43: 3D Graphics Transform

Quaternion 연산 법칙

Page 44: 3D Graphics Transform

QUATERNION과 Translation

Page 45: 3D Graphics Transform

임의의 축에 대한 회전과 QUATERNION의 곱

Page 46: 3D Graphics Transform

QUATERNION을 이용한 회전1

임의의 축(Axis)과 각도를 QUATERNION으로 바꾼다. 이 때 각도는 ‘1/2’로 한다.

Page 47: 3D Graphics Transform

QUATERNION을 이용한 회전2

회전을 적용할 정점을 QUATERNION으로 바꾼다.

Page 48: 3D Graphics Transform

QUATERNION을 이용한 회전3

QUATERNION 곱 q*P*q-1 연산을 수행한다.(D3D는 왼손 좌표계이기 때문에 q-1*P*q 순으로 곱한

다.)

Page 49: 3D Graphics Transform

QUATERNION을 이용한 회전4

최종 연산의 결과도 QUATERNION이므로 이중에서 허수 부를 선택한다.

Page 50: 3D Graphics Transform

참고자료

http://3dapi.com/