2012-04-13 3 views
4

너무 큰 시간 단계를 수정 : http://www.gamedev.net/page/resources/_/technical/math-and-physics/a-simple-time-corrected-verlet-integration-method-r2200시간 Verlet 통합 및 전 Verlet 통합은 여기에서 찾을 수정 시간을 사용

하지만 내 볼은의 벽에 (그것을 바탕으로 수평 벽, 볼과 가속 아래로 지시되는) 경우 언젠가 내 게임이 올바른 방식으로 충돌을 인식하지 못하고 공이 떨어집니다. 1/60처럼 고정 캡을 deltatime에두면 작동하는 것 같습니다.

나는 문제가 너무 큰 timesteps라고 생각한다. 그러나 너무 큰 타임 스텝을 피하기 위해 시간 수정 된 베렛 통합이 이루어졌습니다. 맞습니까? 그렇다면 시간 캡이 필요한 이유는 무엇입니까?

답변

2

제가 이해 한 바로는, 시간이 보정 된 verlet 통합은 변동하는 프레임 속도가있을 때만 도움이되지만 기본 프레임 속도가 너무 낮 으면 도움이되지 않습니다.

+0

을이입니다 대신 자신의

x = x + (x – xl)*h/hl + a*h*(h + hl)/2 

을, 내 프레임 속도가 너무 낮지 만 스레드와 모든주기를 사용하여 verlet 통합을 수행합니다. 스레드의 2주기 사이의 deltatime은 고정되어 있지 않고 변동이 심합니다. 때로는 프레임 속도가 너무 낮을 수 있습니다. 그렇다면 모자를 사용하는 것이 맞습니까? – thebestneo

+0

볼 변경 셀을 제어하는 ​​기능을 추가했습니다. 예를 들어 볼이 1에서 2로 셀을 변경하면 함수는 마지막 셀에 벽이 있는지 확인합니다. 맞으면 볼이 마지막 셀로 이동하고 위치와 지속 시간이 동일하게 설정됩니다 (벽 -> 속도 = 0 충돌). 그러나 때로는 deltatime의 한계가 없으면 작동하지 않습니다. @ Lâm Tran Duy – thebestneo

+0

내 새 답글을 읽을 수 있습니까? – thebestneo

6

기사에 주어진 방정식은 잘못되었거나 잘못되었습니다. 나는 그것을 유도 할 때,이 얻을 :

x = x + (x – xl)*h/hl + a*h^2 

을 여기에 자신의 차트를 사용하여 예입니다 : 내가 알고하지 않습니다 http://i.stack.imgur.com/TL6HT.png

+0

변수가 무엇을 나타내는 지 명확히 할 수 있습니까? – RenaissanceProgrammer

+2

h는 타임 스텝 기간 (델타 시간), hl은 이전 타임 스텝 (이전 델타 시간 .. l은 'last')이며, x와 xl은 위치이고, a는 가속입니다. 또한 필자는 프로그래머의 사고 방식에서 일종의 생각 이었기 때문에 x의 값을 재 할당하는 할당 작업과 같이 '방정식'이 아닙니다. 나는 이것을 오랫동안 보지 않았기 때문에 기사의 정확한 논리적 오류를 지적 할 수는 없지만 어딘가에 링크 된 이미지가 보여지기 때문에 기사가 보여 주는 모든 통합 방법을 잘못 적용하거나 잘못 이해하기 때문입니다. Verlet을 올바르게 사용하는 방법을 보여 줬습니다. – Aru

+1

내가 정확히 기억한다면 오랜 옛날 기사를 호스팅하는 사이트에 이메일을 보냈는데 오해의 소지가 있거나 잘못된 것은 사실이지만 결코 수정하거나 제거하지 않은 것처럼 보입니다. 너무 많은 사람들을 좌절시키지 않고 주제에서 벗어나서 학습을 지연시키지 않기를 바랍니다. – Aru