2014년 2월 24일 월요일

OpenGL Matrix and Multiple

* 행렬 구조

glLoadMatrixf(M) => Matrix M은 [a, b, c, d, e, f, ..., p]의 배열로 획득

그런데 이것을 4x4 Matrix 형태로 나타내면

 M = [ a e i m
           b f j n
           c g k o
           d h l p] 형태가 된다.


glMulMatrixf(M)을 하면 곱셈은 post multiplication(후위 곱셈)을 취한다.

CTM = CTM * M;

* CTM(Current Transformation Matrix)


* Post multiplication 응용


1. glTranslatef(); => CTM = CTM*T
2. glScalef(); => CTM = CTM * S
3. glRotatef(); => CTM = CTM * R

1,2,3을 한 식에서 보면, CTM = CTM*T*S*R 이된다.

적용 해석은 3(회전)=>2(배율)=>1(이동)

* 정점 적용

1. glTranslatef(); => CTM = CTM*T
2. glScalef(); => CTM = CTM * S
3. glRotatef(); => CTM = CTM * R
4. glVertex3f() => P' = CTM * P
1,2,3,4을 한 식에서 보면, P'=CTM*T*S*R*P가 된다.
- P는 정점

* OpenGL 파이프라인

OpenGL은 model 변환(물체 변환)과 view변환(카메라 변환)이 한번에 적용되어 있다.


model 행렬
1. glScalef(), glRotatef(), glTranslatef()
2. P' = S*R*T*P

view 행렬: gluLookAt()
3. P' = V*S*R*T*P


 

댓글 없음:

댓글 쓰기