Форум: "Игры";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
Вниз
Подскажите плз алгоритм полёта пули на OpenGl!!! Найти похожие ветки
← →
min (2004-05-04 18:15) [0]В теме всё сказано.
← →
ворошиловский стрелок (2004-05-04 21:49) [1]по прямой.. лучше по параболе.
← →
Рамиль © (2004-05-04 22:16) [2]А что, на OpenGL пуля как то по другому летит?!.:) Как же ее тогда на DirectDraw кособочит...
← →
MrAngel (2004-05-05 01:23) [3]Дело в том что в идеале пуля вовсе не летит по прямой. Вспомните снайперов. Те делают поправку на ветер, плотность воздуха, дальность, высота позиции стрелка.
← →
Goorus (2004-05-05 03:25) [4]Угу, а ещё надо учитывать тействие гравитационных сил всех планет во вселенной, Боровское движение, зависимость плотности воздуха от высоты, солнечную радиацию и уровень алкоголя в крови стрелка :)
← →
MeF88 © (2004-05-05 11:34) [5]Помню здесь задача была - на каком расстоянии от стрелка упадет пули, при таких-то условиях... Вот здесь аналогично - просто надо найти кучу учебников и мануалов по физике, хотя бы банальный школьный учебник.
← →
MrAngel (2004-05-06 01:22) [6]Goorus - именно :-)))
← →
matsic © (2004-05-11 19:05) [7]Посмотри на этот фрагмент
#ifndef TFly3D_cpp
#define TFly3D_cpp
#include "vector3D.cpp"
const TVector3D g={0,-9.8,0};
const double K=0.0002;
const double QUALITY=0.0001;
struct TFly3D
{
TVector3D koord, v;
double mass;
void move(double);
};
void TFly3D::move(double dt)
{
double dt_opt,dt_sum,a_var_min,v_abs;
TVector3D a, a_const, a_var;
dt_sum=0;
a_const=(TVector3D)g;
m:
v_abs=abs(v);
a_var=-v*v_abs*K;
a_var_min=QUALITY/dt*v_abs;
if(a_var_min<abs(a_var)) dt_opt=QUALITY/K/v_abs/mass;
else dt_opt=dt-dt_sum;
a=a_const+a_var;
koord+=v*dt_opt+a*dt_opt*dt_opt/2.0;
v+=a*dt_opt;
dt_sum+=dt_opt;
if(dt_sum<dt) goto m;
}
#endif
Полный исходник, конечно, намного побольше. Все таки, имеем дело с 3D-векторами.
Здесь хоть и не учитывается сам ветер, но есть сила сопротивления воздуха. Силу ветра можно добавить к в расчет, если в строкеa_var=-v*v_abs*K;
Вектор скоростиv
заменить на скорость относительно воздухаv1=v-v_air
,
гдеv_air
- скорость ветра.
Не забудь пересчитать иv_abs
соответственно.
Коэффициент сопротивления воздухаK
.QUALITY
отвечает за точность расчета. Чем меньше - тем точнее, но больше жрет ресурсов. Можно брать от 0,01 до 0,1.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.08.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.056 c