Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

codingfarm

26. 좌표 변환 본문

computer graphics/DirectX12

26. 좌표 변환

scarecrow1992 2021. 8. 23. 00:36

0. 소개

world 좌표계를 기준으로 주어지는 오브젝트들을 화면에 수월하게 그리기 위해선 카메라의 좌표를 기준으로 표현한 후, 화면에 출력하기 위해 view port 좌표계로 다시한번 변환할 수 있어야 한다.

이를 위해 좌표변환에 대해 알아야 한다.

 

1. 선형 변환

정의 : Rn에 속하는 임의의 벡터u, v와 스칼라 c에 대하여

1) T(u+v)=T(u)+T(v)

2) T(cu)=cT(u)

위 2개 조건을 만족하는 변환T:RnRm 을 선형변환 이라 한다.

즉, 선형변환 T

T(c1v1+c2v2)=c1T(v1)+c2T(v2)

위 등식을 만족한다.

 

1-1. 행렬 표현(표준 행렬)

Am×n 행렬 일때

TA(x)=Ax,xRn

로 정의되는 행렬변환 TA:RnRm은 선형변환이다.

e1=(1,0,0,0)e2=(0,1,0,0)e3=(0,0,1,0)en=(0,0,0,1)

일 때

A=[T(e1)|T(e2)||T(en)]

위와 같은 행렬 A를 선형변환 T의 표준행렬이라 한다.

 

선형변환 T:RnRm이 주어질 때
T(p)=pA,pRn
를 만족하면 A를 선형변환 T의 표준행렬 또는 행렬표현이라 한다.

 

 

컴퓨터 그래픽스에서 쓰이는 기초적인 선형 변환은 아래와 같다.

1-2. 비례

비례변환 S는 아래처럼 정의된다

S(x,y,z)=(Sxx,Syy,Szz)

위 선형변환을 바탕으로 표준행렬을 구하면

S(ˆi)=(Sx,0,0)S(ˆj)=(0,Sy,0)S(ˆk)=(0,0,Sz)

s=[s(ˆi)s(ˆj)s(ˆk)]=[Sx000Sy000Sz]

그러므로

S(x,y,z)=[xyz][Sx000Sy000Sz]

 

2. 아핀변환

 

 

 

3. 좌표변환

 

용어

BP : B 좌표계 기준 점 P의 좌표

    BP의 성분 : (BPX,BPY,BPZ)

ˆXB,ˆYB,ˆZB : B 좌표계의 각 주축들

AˆXB,AˆYB,AˆZB : B 좌표계의 각 주축들 (A 좌표계 기준)

 

 

BP의 좌표를 좌표계 A를 기준으로 변환하기

1. 임의의 좌표계

BˆUBˆVAˆXAˆY에 대응된다.

BPAP 로 변환하는 방법에 대해 알아본다.

우선 BPAˆXA 기준으로 바꾸어 본다. (APx를 구한다.)

BPuAUBBPvAVBˆXA에 투영한 길이의 합과 같다.

즉, 각 벡터간의 내적의 합이라 볼 수 있다.

APx=(BPuAˆUB)ˆXA+(BPvAˆVB)ˆXA=ˆXA(BPuAˆUB+BPVAˆVB)

이때 ˆXAY 성분의 값이 0이므로 AˆUBAˆVBˆXA성분만 곱해지게 되어 사실상 스칼라 끼리의 곱이라 볼 수 있다.

즉,

AˆUB=(AUB.x,AUB.y,AUB.z)

AˆVB=(AVB.x,AVB.y,AVB.z)

라 할때

APx=BPuAUB.x+BPvAVB.x=[BPu,BPv][AUb.xAVb.x]

이런식으로 APy 도 구하면

APy=BPuAUB.x+BPvAVB.x=[BPu,BPv][AUb.yAVb.y]

그러므로 AP

AP=[APx,APy]=[BPu,BPv][AUB.uAUB.vAVB.uAVB.v]

편의상 B 좌표계의 주축을 ˆUB,ˆVB로 표현했찌만 ˆXB,ˆYB로 표현하면

AP=[APx,APy]=[BPx,BPy][AUB.xAUB.yAVB.xAVB.y]

이를 3차원으로 확장하면

AP=[APx,APy,APz]=[BPx,BPy,BPz][AˆXBAˆYBAˆZB]=BPARB

 

2. 좌표계 이동

B좌표계의 원점이 A좌표계 기준 AO위치에 있을경우 BPA좌표계에 대해 표현하면 아래와 같다.

AP=BPARB+AO

 

 

 

2. 카메라

 

 

 

 

 

 

 

 

 

'computer graphics > DirectX12' 카테고리의 다른 글

27-1. 텍스처적용 예제 코드  (0) 2021.09.22
27. 텍스처 적용(Texturing)  (0) 2021.09.19
24. 색이 변하는 구  (0) 2021.08.19
23. Cube 그리기  (0) 2021.08.10
22. 삼각형 그리기 2  (0) 2021.08.05
Comments