블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2797)
Unity3D (853)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
필요한 경우는 아래와 같다.
1. 2족 캐릭터가 지형의 경사면에서 죽는 애니메이션.
2. 4족 이상 동물의 지형 경사면 이동.


일단 캐릭터가 서있는 지형에대한 노멀벡터를 알아야한다.
자신의 위치에서 바닥으로 피킹을 해서 얻으면 된다.
캐릭터의 크기가 바닥 그리드에 비해 크다면 캐릭터의 크기에 맞게 삼각형 형태의
3정점에서 피킹을하여 얻어지는 평면의 노멀값을 계산하여 사용하도록 하자.

1. 현재 캐릭터 위치에서 지형으로 피킹을 한다.
2. 피킹으로 얻어진 노멀 벡터와 Z축 벡터를 이용하여 회전행렬을 구한다.
3. 캐릭터의 회전값에 적용한다.


ex)
// 원래 벡터 srcVec, 변환후 벡터 destVec, 회전축 벡터 axisVec
// axisVec = srcVec x destVec                                               // 회전축 벡터
// angle = acos( srcVec * destVec / |srcVec| |destVec| )       // 회전각


// m_spCharRootNode 캐릭터 루트 노드
// m_kPickNormal 현재 위치에대한 노멀 벡터
NiMatrix3 r_kRot;
NiPoint3 r_kAxis = m_kPickNormal.Cross( NiPoint3(0.0f, 0.0f, 1.0f) );
float r_fDot = m_kPickNormal.Dot( NiPoint3(0.0f, 0.0f, 1.0f) );
float r_fRadian = NiACos( r_fDot );
r_kRot.MakeRotation( r_fRadian, r_kAxis );
m_spCharRootNode->SetRotate( r_kRot );


주의사항 : 루트노드를 카메라 회전및 기타 다른용도에
사용되고 있다면 위 코드는 정상적으로 구현되지 않을 수 있습니다.
이럴 경우 노멀벡터값을 루트노드회전행렬과 곱한값을 사용하면 해결 될 수 있습니다.
 
반응형

'Gamebryo > Lecture' 카테고리의 다른 글

FrameRenderSystem에서.. 커스텀알파소터프로세스..  (0) 2011.09.18
무기잔상효과  (0) 2011.02.08
Gamebryo 셋팅  (1) 2011.01.06
게임브리오 강좌(?) 링크  (3) 2010.04.14
Gamebryo 2.5  (0) 2010.04.12
Posted by blueasa
, |