Exemplo n.º 1
0
void
mat_lookatv(Mat *m, const Vec *eye, const Vec *center, const Vec *up)
{
	Vec z;
	vec_subv(center, eye, &z);
	vec_norm(&z);

	Vec up_norm;
	memcpy(&up_norm, up, sizeof(Vec));
	vec_norm(&up_norm);

	Vec x;
	vec_cross(&z, &up_norm, &x);
	vec_norm(&x);

	Vec y;
	vec_cross(&x, &z, &y);
	vec_norm(&y);

	Mat lookat = {{
		 x.data[0],  x.data[1],  x.data[2], 0.0,
		 y.data[0],  y.data[1],  y.data[2], 0.0,
		-z.data[0], -z.data[1], -z.data[2], 0.0,
		0,          0,          0,          1
	}};
	mat_translate(&lookat, -eye->data[0], -eye->data[1], -eye->data[2]);
	memcpy(m, &lookat, sizeof(Mat));
}
Exemplo n.º 2
0
Arquivo: PHYS.c Projeto: 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);
}
Exemplo n.º 3
0
Arquivo: PHYS.c Projeto: 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);
}