'개인 프로젝트/OpenGL_Project'에 해당되는 글 2건
- 2007/10/18 쿼터니언에 대해서... 이동성분에 대해서..
- 2007/10/15 Gsi_OpenGL_Viewer_Ver0.1
수학적인 부분에서 접근하는 쿼터니언은 솔직히 아무리 봐도 잘 모르겠다.
모 대충 보면 오일러로 회전을 표현하다 보면 짐벌락 현상이 생기게 되고,
쿼터니언은 생기지 않는다. 이런말도 있다.
쿼터니언은 x, y, z 의 임의의 축과 angle로 이루어져 있다고 한다.
더 가다 보면..
항등 쿼터니언.. 모 행렬로 변환하는 방법 등등..
참 많다. -.-
근데 오픈지엘에서 특정 쿼터니언을 사용해서 어떤 값을 넣으면
어떻게 변한다.
모 이런건 잘 없는거 같다.
왜 프로그래밍 하다 보면.. 솔직히 모 수학적인 개뿔 이런거 보다 ^^
한줄의 코딩이 더 좋은법 아닌가..
쿼터니언 몇줄로 테스트를 해보았다.
CQuat quat = CQuat(90, 1, 0, 0);
이것을 하게 되면 x 축을 90도 돌린 것이다.
이 클래스에는 아래와 같은 GetDirectionVector() 함수가 존재 한다.
quat3.GetDirectionVector(x, y, z);
이걸 가지고.. 이동값에 특정값을 더해주면..
x축으로 90도 돌린 위치로 이동하게 된다.
대충 말해서.. x축으로 90도 돌렸으니 y 축이 되는 것이다. (이해가 가는가?)
static float pos[3] = {0, 0, 0};
pos[0] += x * 0.1;
pos[1] += y * 0.1;
pos[2] += z * 0.1;
glTranslatef(pos[0], pos[1], pos[2]);
이것을 하게 되면 x 축을 90도 돌린 것이다.
이 클래스에는 아래와 같은 GetDirectionVector() 함수가 존재 한다.
quat3.GetDirectionVector(x, y, z);
이걸 가지고.. 이동값에 특정값을 더해주면..
x축으로 90도 돌린 위치로 이동하게 된다.
대충 말해서.. x축으로 90도 돌렸으니 y 축이 되는 것이다. (이해가 가는가?)
static float pos[3] = {0, 0, 0};
pos[0] += x * 0.1;
pos[1] += y * 0.1;
pos[2] += z * 0.1;
glTranslatef(pos[0], pos[1], pos[2]);
다르게 해보자.
CQuat quat = CQuat(45, 1, 0, 0);
CQuat quat2 = CQuat(45, 1, 0, 0);
CQuat quat3;
quat3.MultAndSet(quat, quat2);
이렇게 두개의 쿼터니언을 곱하게 되면 어떻게 될까?.
CQuat quat3 = CQuat(90, 1, 0, 0);
과 같은 현상이 발생된다.
CQuat quat2 = CQuat(45, 1, 0, 0);
CQuat quat3;
quat3.MultAndSet(quat, quat2);
이렇게 두개의 쿼터니언을 곱하게 되면 어떻게 될까?.
CQuat quat3 = CQuat(90, 1, 0, 0);
과 같은 현상이 발생된다.
다른 함수를 더 사용하면..
CQuat quat = CQuat(45, 1, 0, 0);
CQuat quat2 = CQuat(45, 1, 0, 0);
quat2.PostMult(quat);
이렇게 하면 quat2는 90, 1, 0, 0 의 값을 입력한 것과 같게 된다.
CQuat quat2 = CQuat(45, 1, 0, 0);
quat2.PostMult(quat);
이렇게 하면 quat2는 90, 1, 0, 0 의 값을 입력한 것과 같게 된다.
이동성분에 대해서만 해봤다.
회전도 담에는 해보자.
본 프로젝트는 glVelocity 에 있는 3DENGINE 을 사용해서 제작하였다.
내용을 보면 아래와 같은 내용들이 있다.
- OBJ 파일을 로딩해서 화면에 그려줄 수 있다.
- Sky Box를 표현해 준다.
- Crosshair 마우스를 원점에 고정해서 카메라를 이동시켜 줄 수 있다.
- Octree 를 사용해서 충돌 및 반응 처리를 하고 있다.
우선 이 프로젝트는 해상에서 배가 움직일때 시뮬레이션을 처리 하기 위해서 베이스를 구축하는데 사용한다.
현재까지 변경한 내용들...
1. 소스가 Win32 베이스라서 MFC 베이스로 변경
2. 카메라의 부분은 많이 바꿨다. 쿼터니언을 사용하지 않고, 행렬로만 사용했다.
바꿔 나가야할 내용들...
1. 트랜스폼 클래스르 추가 해서 카메라의 기능 확장 (사용자의 확장 가능하게)
2. 트랜스폼을 사용한 Mesh를 이동처리 해본다.
3. 회전 및 직선 처리의 에니메이션 클래스를 제작한다.
4. glu 오브젝트를 추가해서 사용할 수 있게 한다. (기본 프리미티브 드로잉 가능하게)
5. 파티클 클래스를 추가한다. (텍스처 적용한 파티클)
- 배의 궤적을 표현하기 위함
6. Viewport를 추가해서 줌인 화면을 구현한다. (이건 윈도우로 해서 픽킹 가능하게??)
...
더 있을듯 한데. 우선 여기까지만 해보자.

ShipSimulation.zip
Prev
Rss Feed