간단한 점프의 구현에 관한 답변.

프로그래밍/프로그래밍 메모장 2006/07/14 23:40

GPG의 질문이 올라왔길래 정말 오래전에 했던  포물선운동에 대해서
생각하고 구현햇던 것들을 간단히 정리해보았습니다.

(아마 16년전쯤 될것입니다. 몇년전이라는 것은 중요하지 않기 때문에..
젠장 상당히 오래됬군요;; ) 그당시  게임 만들어보자고 공부했던 시절에..
대포의 각하고 파워를 주면 어떻게 움직일것인가 .. 누구라도 처음 시작할때
한번쯤 고민했던 그런내용...이 갑자기 생각이나서 말입니다.)

질문의 내용은 이것입니다. 캐릭터의 점프구현은 어떻게...
http://www.gpgstudy.com/forum/viewtopic.php?topic=11538

구현의 디테일은 다음과 같은 방법입니다.

저의 핵심은 이겁니다. 휴리스틱..

움직임함수는 여러가지를 쓸수 있겠지만 점프라면  간단한 포물선또는
그런느낌만 주면 됩니다. 실제라기보단 실제처럼 보이는거를 추구하는것이다.

컴퓨터게임 그리고 PC그래픽의 발전은 실제와같은 것을 쓰는것보다는
항상 속도를 위해서 "실제처럼"보이는 것을 추구하면서 발전해왔습니다.
지금의 PC의 3D API도 레이트레이싱의 실제물리를 이용한것이 아닌
마치 그것처럼 보이는 형태로 발전되어 온것이기 때문입니다.

사실 디지탈이 엄밀하게 보면 샘플링이기 때문에 아날로그보다 부정확해야 되는데
실제로는 그런 느낌이 아닌것처럼 ... 물론 예민한 사람은 구분이 가능하기 때문에
아날로그를 더 좋아함니다만...

뭔가 정밀하게 하자면 중력가속도 /부력이나 마찰력 등등 이용한
물리법칙으로 구현하시면 되구요.


초간단이라면 이런식입니다.(일단 2차원만 고려했습니다. 3차원도 결국 평면의 방향만
결정되면 캐릭터가 진행할면만 고정되면 그대로 사용해도 상관없을 것 같습니다.)

일단 점프가 끝나는 시점은 땅에 닺는 시점입니다.  결국 시간단위가 되겠죠. 점프시작시점이
T0 라고 하면 점프끝나는 시점은 어딘가의 Tn 시점이 되겠습니다.

점프곡선을 가파르게할것인지 아니면 유연하게 할것인지는 가속도로 정합니다.  V
가속도는 당연이  T0와 Tn 단에서 가장 큽니다. 절벽으로 떨어지는 경우가 있기때문에
최대가속도도 정해놓으면 좋습니다. 최대가속도에 도달하면 더이상 속도는
증가하지 않는것이죠
가속도의 증분(dV) 에 의해서 최대높이가 결정됩니다. 만약 가속도가 10이고
증분치가 -1 이라면 최대높이는 T10 에서 이루어지며  10+9+8+7+....+1 이 되겠습니다.


높이와 가속도 구하는 알고리즘은 이렇게 되겠습니다.

1.  높이계산 Tn 시점의 높이 =  Tn-1 시점의 높이 +  가속도

2.  다음단계를 위한 가속도계산

                              가속도 = 가속도  - 일정치
                              if 가속도가 최대치를 넘는다면 최대가속도로 고정.

이것을 가지고 프레임단위로 적용하면 되겠습니다. 너무 빨리 내려온다고 싶으면
증분치를 작게설정하거나
높이가 낮다고 생각하면 최초가속도를 크게 하면 되겠습니다.

아니면 스케일링을 해도 됩니다.

높이 =  높이* 스케일.

위의 알고리즘은 굉장히 간단합니다만 상당히 정밀한 곡선을 가집니다. 왜냐면 미분의 원리를 이용한 방법이기 때문에 (이차방정식인 포물선을 미분하면 1차방정식이 되지요)

속도도 빠르면서 다른형태의 정밀한 방정식을 사용한 구현하고 별차이가 거의 없습니다. 
가속도하고 증분값만 잘 조정해주면 말입니다. 실제적으로 위의 알고리즘이 사실
T에관한 운동의공식이기 때문에;;;.

뭐든지 그림이 확실하죠.

위처럼 초기속도가 5이고  증분이 -1 이라면 T1에서는 5
T2에서는 5+ 4 , T3 에서는 5+4+3  이런씩으로 되겠습니다. 가속도가 점점 줄어들다가
0가  되고나면  높이값이 최대가 되고 그 다음은 방향이 반대가 되어서 내려오게되죠.

위의 그래프는 T에 관한 높이 그래프 이기때문에 x,y를 평면에 대한 고려는
다시 앞으로 가는 속도를 고려해서 계산하면 3D에서 적용할 수 있겠습니다.

앞으로 가는 속도가 없으면 제자리 뛰기가 될것이며 속도가 크면 완만한 포물선, 속도가
적으면 경사큰 포물선이 되겠습니다. 또는 속도가 변할수 있다면 보통의 게임은 점프하면
그 시점에서 계산된 속도로 되어서 변함이 없지만 이중점프를 해야된다거나 하는 경우에는
추가적인 속도변경을 해주시면 됩니다.

From Xevious7. http://www.xevious7.com

top

◀ PREV : [1] : .. [12] : [13] : [14] : [15] : [16] : [17] : [18] : [19] : [20] : .. [23] : NEXT ▶