'rand'에 해당되는 글 1건
- 2010.07.05 오리엔테이션 생성중 실수.
랜덤함수를 활용할때 한번더 생각해보고 하자.
전에 데미지를 추출할때도 0으로 나누는 에러가 났었다. 그때도 랜덤함수때문에..
pGoblin->GetSceneObject()->LookAt( D3DXVECTOR3( 0, 0, 0 ), D3DXVECTOR3( rand()%10-5, 0, rand()%10-5 ), D3DXVECTOR3( saengine::COrientation::Y_AXIS ) );
첫번째 파라메터는 위치, 두번째 파라메터는 바라보는 위치, 세번째 파라메터는 업벡터를 뜻하는데
두번째 파라메터를 보면 저 처리대로라면 0, 0, 0이 나올 수 있다.
그러니까.. 위치와 바라보는 위치가 똑같아 지고, 결과적으로 업벡터와 측면벡터가 0,0,0이 나오는 사태가 벌어지게 된다. 그래서 간단하게 아래와 같이 바꾸었다.
INT targetX = rand()%10-5;
INT targetZ = rand()%10-5;
INT targetZ = rand()%10-5;
if( targetX + targetZ == 0 ) targetX = 1;
pGoblin->GetSceneObject()->LookAt( D3DXVECTOR3( 0, 0, 0 ),
D3DXVECTOR3( targetX, 0, targetZ ), D3DXVECTOR3( saengine::COrientation::Y_AXIS ) );
허나 무엇보다 중요한건 엔진자체에 assert처리를 해야하는 점이었다..
비록 프로그래밍은 잘못하더라도 에러는 나야 정상아닌가 싶어 수정하기로 했다.
그래서 아래와 같이 수정해주었다.
VOID COrientation::SetDirection( const D3DXVECTOR3& viewDir, const D3DXVECTOR3& upDir, const D3DXVECTOR3& rightDir )
{
// 오브젝트의 월드내 방향이다.
m_vecViewDir = viewDir;
m_vecUpDir = upDir;
m_vecRightDir = rightDir;
{
// 오브젝트의 월드내 방향이다.
m_vecViewDir = viewDir;
m_vecUpDir = upDir;
m_vecRightDir = rightDir;
NormalizeDirections();
debug_assert(
!( m_vecViewDir.x == 0.0f && m_vecViewDir.y == 0.0f && m_vecViewDir.z == 0.0f ) &&
!( m_vecUpDir.x == 0.0f && m_vecUpDir.y == 0.0f && m_vecUpDir.z == 0.0f ) &&
!( m_vecRightDir.x == 0.0f && m_vecRightDir.y == 0.0f && m_vecRightDir.z == 0.0f ),
_T("제로벡터 에러") );
.....
!( m_vecViewDir.x == 0.0f && m_vecViewDir.y == 0.0f && m_vecViewDir.z == 0.0f ) &&
!( m_vecUpDir.x == 0.0f && m_vecUpDir.y == 0.0f && m_vecUpDir.z == 0.0f ) &&
!( m_vecRightDir.x == 0.0f && m_vecRightDir.y == 0.0f && m_vecRightDir.z == 0.0f ),
_T("제로벡터 에러") );
.....
'작업일지' 카테고리의 다른 글
모델이 깨지는경우 (0) | 2010.07.16 |
---|---|
캐릭터 충돌처리 (1) | 2010.07.07 |
그림자 처리.. (0) | 2010.06.26 |
Perspective Shadow Map.. (0) | 2010.06.22 |