블로그 이미지
이태원에서 사는 다섯식구의 무직 가장. 흰둥에미

카테고리

분류 전체보기 (184)
Itaewon (2)
ryu's?? (1)
20121210이전 (20)
20130827이전 (147)
soo'study (13)
Total34,674
Today8
Yesterday13

'quaternion'에 해당되는 글 2건

  1. 2013.04.03 짐벌락과 그 해결.
  2. 2013.03.18 쿼터니언 - 1

짐벌락.

오일러의 공식을 이용해 회전 변환이 이루어질 시, x, y, z 세 축에 대해 각각의 회전을 조합하게 된다.

따라서 연산 순서에 따라 한 축의 90도 회전에 의해 두 축이 겹쳐, 한 축의 자유도를 잃게 됨(즉 겹친 두축의 회전이 동일하게 됨)

(여기서 축이란 회전 축을 의미)

수학적으로는 아무 문제 없는 결과이지만, 3차원상에서의 좌표변환에 문제가 생김.


해결법.

1. 방법으로서는 가장 손쉬운 쿼터니언(사원수)을 사용하면 됨.(물론 수학적 이해나, 실제 증명, 계산은 골 때림)

FLOAT                        fAngleX;

FLOAT                        fAngleY;

FLOAT                        fAngleZ;

D3DXMATRIXA16          matRot;

D3DXQUATERNION       qtRot;

D3DXQuaternionRotationYawPitchRoll(&qtRot, fAngleY, fAngleX, fAngleZ);

D3DXMatrixRotationQuaternion(&matRot,&qtRot);

SetTransform(D3DTS_WORLD, &matRot);


2. 또는 각 오브젝트가 스스로 x, y, z의 베이스 벡터를 지니고, 회전에 따라 베이스 벡터를 갱신해주는 방법이 있음.

Yaw가 변경시, Z축의 벡터를 회전 시키고, Z와 변하지 않는 Y축의 외적을 이용해 X축을 새로 구해줌.

Pitch 변경시, Z축의 벡터를 회전 시키고, Z와 변하지 않는 X축의 외적을 이용해 Y축을 새로 구해줌.

Roll 변경시, X축의 벡터를 회전 시키고, X와 변하지 않는 Z축의 외적을 이용해 Y축을 새로 구해줌.

(회전의 기준이 되는 축은 변경되지 않으므로, 변경될 두 축 중 하나만 회전에 의한 값을 구하고, 다른 한 축은 외적을 이용해 구함,

 두 축 모두 회전을 이용해 구하다 보면, 오차가 누적되어 두 축의 각이 PI/2가 아니게 됨)


단, 1번은 월드 좌표 축 기준으로 회전한 각을 적용하고,

     2번은 현재 베이스 벡터를 기준으로 회전한 각이 적용되게 구현하면 됨.?? 말이 어렵다.. 해보면 알꺼임.


그 외에도 피하는 법들이 있는데 예외 처리 귀찮으니 패스함.


신고

'20130827이전 > DX' 카테고리의 다른 글

3D 피킹 정리  (0) 2013.04.30
3D Picking  (0) 2013.04.07
짐벌락과 그 해결.  (0) 2013.04.03
월드 좌표계로의 변환  (0) 2013.04.01
D3DXMATRIX 와 D3DXMATRIXA16  (0) 2013.03.25
PURE DEVICE  (3) 2013.03.24
Posted by 흰둥에미

쿼터니언 - 1

20130827이전/DX / 2013.03.18 16:50

사원수란

 - 복소수를 확장하여 만든 새로운 수 체계.

   3차원 공간(3개의 요소를 이용해 정점을 표현)상의 정점에 대한 수 체계.

 

특징

 - 가환적이지 않음(즉, 곱셈의 교환 법칙이 성립하지 않음)

   i^2 = j^2 = k^2 = ijk = -1;

   ij = -ji = k,  jk = -kj = i, ki = -ik = j ( 벡터의 외적과 비슷하지 아니한가? A X B = -B X A = NAB)

 

표현

 - 사원수 q = w + xi + yj + zk 에 대해 실수부(스칼라부 Re(q))는 w,

   허수부(벡터부 Im(q))는 xi + yj + zk 이다.

   q의 공액(켤레) 사원수는 벡터부의 부호를 뒤집은 q* = Re(q) - Im(q) = w - xi - yj - zk

   사원수 q의 노름(norm) 또는 절대값 |q|는 |q| = sqrt(qq*) = sqrt(x^2 + y^2 + z^2 + w^2) 이다.

   사원수는 스칼라와 3차원 벡터의 순서쌍 q = (w, v)로 표현할 수도 있는데,

   이때 사원수의 곱은 (a, u)*(b, v) = (ab-u (dot) v, av+bu+uXv)와 같다.

신고

'20130827이전 > DX' 카테고리의 다른 글

D3DXMATRIX 와 D3DXMATRIXA16  (0) 2013.03.25
PURE DEVICE  (3) 2013.03.24
쿼터니언 - 1  (0) 2013.03.18
4. 정점 버퍼와 인덱스 버퍼  (0) 2013.02.04
3. 렌더링 파이프라인  (0) 2013.02.04
2. 디바이스의 생성.  (0) 2013.02.04
Posted by 흰둥에미

최근에 달린 댓글

최근에 받은 트랙백

글 보관함