Descent Freespace를 기억하는 사람들에게는 비 원산 미사일이나 레이저를 쏠 때 적을 겨냥 할 수있는 좋은 기능이 있습니다. 움직이는 표적을 치기 위해 어디에서 쏠 것인가를 말하던 쫓아 오는 배.3d 게임에서 목표물을 "촬영"하는 알고리즘
답변을 사용하여 AI algorithm to "shoot" at a target in a 2d game에서 시도했지만 2D 용이므로 적응하려고했습니다.
먼저 계산을 분해하여 XoZ 평면의 교차점을 풀고 x와 z 좌표를 저장 한 다음 XoY 평면의 교차점을 해결하고 마지막 xyz에 y 좌표를 추가 한 다음 클립 공간으로 변환하고 놓습니다. 그 좌표의 텍스처. 물론 그것이해야 할 것처럼 작동하지 않습니다. 그렇지 않으면 질문을 게시하지 않았을 것입니다.
XoZ 평면에서 x를 찾은 후 XoY에서 x가 동일하지 않으므로 뭔가 잘못되었습니다.
float a = ENG_Math.sqr(targetVelocity.x) + ENG_Math.sqr(targetVelocity.y) -
ENG_Math.sqr(projectileSpeed);
float b = 2.0f * (targetVelocity.x * targetPos.x +
targetVelocity.y * targetPos.y);
float c = ENG_Math.sqr(targetPos.x) + ENG_Math.sqr(targetPos.y);
ENG_Math.solveQuadraticEquation(a, b, c, collisionTime);
첫 targetVelocity.y 실제로 targetVelocity.z (targetPos 대해 동일)과 실제로 targetVelocity.y 년대 초 시간이다.
XoZ 후 최종 위치
crossPosition.set(minTime * finalEntityVelocity.x + finalTargetPos4D.x, 0.0f,
minTime * finalEntityVelocity.z + finalTargetPos4D.z);
및
crossPosition.y = minTime * finalEntityVelocity.y + finalTargetPos4D.y;
2 개 평면으로 분리하여 좋은 산출 내 접근법 XOY 후
입니까? 3D의 경우 완전히 다른 접근 방식이 있습니까?- sqr()은 정사각형이 아니며 sqrt입니다. 혼동을 피할 수 있습니다. 그
Abs(tp+t*tv) == t*pv
해결을 의미
여기에 중력이 없기를 바랍니다 ... – Eric