コード例 #1
0
ファイル: PHYS.c プロジェクト: cjxgm/frinx
void PHYS_verlet_apply(float pos[3], float oldpos[3], float force[3])
{
	float t[3];
	float fs[3];
	float fr[3];

	vec_cpy(t, pos);
	vec_mul(fs, force, KE_spf*KE_spf);
	vec_sub(fr, pos, oldpos);
	vec_mulv(fr, -0.1);
	vec_addv(fs, fr);

	vec_addv(pos, pos);
	vec_subv(pos, oldpos);
	vec_addv(pos, fs);
	vec_cpy(oldpos, t);
}
コード例 #2
0
void
vec_lerp(const Vec *a, const Vec *b, float t, Vec *r_v)
{
	Vec at, bt;
	vec_mul(a, 1 - t, &at);
	vec_mul(b, t, &bt);
	vec_addv(&at, &bt, r_v);
}
コード例 #3
0
ファイル: PHYS.c プロジェクト: cjxgm/frinx
void PHYS_con_stick_apply(PHYS_ConStick * con)
{
	float delta[3];
	vec_sub(delta, con->node[1], con->node[0]);
	float dsqr = vec_sqr(delta);
	float lsqr = con->len * con->len;
	float diff = lsqr / (dsqr+lsqr) - 0.5;
	vec_mulv(delta, diff);
	vec_subv(con->node[0], delta);
	vec_addv(con->node[1], delta);
}