'Programing/게임에 적용 해보는 수학'에 해당되는 글 2건

  1. 2012.05.17 날 공격한 녀석이 뒤에서 때렸니 앞에서 때렸니??
  2. 2012.05.17 네발 달린 동물이 지형을 걷다.

어느 날  기획자가 공격자가 피격자 뒤에서 공격 하면 데미지를 더 준다 던지

명중률이 더 올라간다던지  피격자가 등 뒤에서 맞았는지 앞에서 맞았는지 요구 한다.

 

1 ) 피격자의 시야각을 설정한다.

2 ) 피격자와 공격자의 위치를 안다.

3 ) 피격자의 방향벡터를 안다.

이 세 가지만 알면 해결 할 수 있다.

 

 

모 피격자의 시야각은 xml로 뺀다든지 해서 기획자가 고칠 수 있게 해주자.

 

피격자 시야 각 120도

 

O : 피격자

A,B,C : 공격자

 

우선 O와 A,B,C의 위치를 알기 때문에

피격자와 공격자의 위치를 빼주면 피격자와 공격자 사이의 위치 벡터가 생긴다.

피격자의 방향벡터도 안다.

 

A - O = T1

B - O = T2

C - O = T3

 

피격자 방향 벡터 = T4

 

자 이제 피격자가 공격받은 방향을 판단 할 수 있는 기본 정보가 다  모였다.

 

내적의 성질을 이용하면 된다.

 

시야각이 120이 되어있는데 딱 절반으로 나두면 된다. 그럼 60도 가 나온다.

절반으로 나눈 이유는

내적했을 때 0-90도 360-270도, 90-180도 270-180도 대칭 값이다.

무슨 말이 냐면 45도나 315도를 내적하면 0.7071....이라는 같은 값이 나온다.

그러면 그냥 315도를 45도라 생각하면 된다. 이 성질을 이용하면

120도가 다 필요없다 딱 나눠서 60을 이용하면 된다.

 

결론

cos(60) = 0.5

if( 0.5 > 피격자 방향벡터 · 피격자와 공격자의 방향벡터 )

앞에서 맞았음

else

뒤어서 맞았음

 

이렇게 된다.

 

0.5 > T1 · T4 =  거짓 (뒤)

0.5 > T2 · T4 =  참 (앞)

0.5 > T3 · T4 =  참 (앞)

Posted by 부우산사나이
:

두발인 인간형은 경사면을 걸어도 별로 어색하지 않다.

 

하지만 네발달린 동물이나 길죽하게 생긴 뱀등등 은 경사면을 움직일 때

 

경사면에 따라 회전하지 않으면 지형에 많이파묻히게 되어서 눈에 거슬린다.

 

그냥 쌩까도 되지만 난 해결하고 싶으니 GoGo

 

우선 해결 하기 위해선 벡터, 외적, 내적정도는 알아야 할듯

 

 

 

1 ) 오브젝트가 움직이는 방향 벡터 : A

2 ) 현재 오브젝트가 지나고 있는 지형의 노말 벡터 : B

 

R = HALF_PI acos( A · B /  ( A.Length * B.Length ) )

 

정말 쉽다. ㅎㅎㅎㅎ

 

R값을 자신이 구현하고 있는 좌표계에 맞춰서 오브젝트를 회전 시키면

 

 

경사각에 맞게 오브젝트가 아름답게 회전해서 이동을 한다.!!

 

단 R값을 바로 적용하면 아주 튀어보이니깐 델타값에 맞추서 서서히

 

적용시키는것이 아름답다!!

Posted by 부우산사나이
: