Esempio n. 1
0
void			ft_init_trans(t_ray *ray, t_ray *tran, t_obj *obj)
{
	float	k;
	float	n;
	float	scal;
	float	*tmp;
	float	*tmp2;

	tmp2 = ft_intxvect(-1, ray->norm);
	ft_li_pos(tmp2, tran);
	free(tmp2);
	ray->tran = tran;
	n = ft_get_inds(ray, obj);
	scal = ft_prod_scal(ray->v, ray->norm);
	if (1 + n * n * (scal * scal - 1) > 0)
		k = n * scal - sqrt((1 + n * n * (scal * scal - 1)));
	else
		k = n * scal;
	tmp = ft_intxvect(k, ray->norm);
	tmp[0] = n * ray->v[0] + tmp[0];
	tmp[1] = n * ray->v[1] + tmp[1];
	tmp[2] = n * ray->v[2] + tmp[2];
	tmp = ft_norm_vect(tmp);
	tran->v[0] = tmp[0];
	tran->v[1] = tmp[1];
	tran->v[2] = tmp[2];
	free(tmp);
}
Esempio n. 2
0
static void		ft_get_vector(t_dt *dt, t_ray *ray)
{
	float		X;
	float		Y;
	float		**tmp;
	float		del;
	float		*tmp2;

	tmp = (float **)malloc(sizeof(float *) * 3);
	del = 2 / (float)X_MAX;
	tmp[0] = ft_intxvect(dt->foc, dt->axes[0]);
	X = del * ((float)X_MAX / 2 - ((float)ray->pix[0] + 0.5));
	Y = del * ((float)Y_MAX / 2 - ((float)ray->pix[1] + 0.5));
	tmp[1] = ft_intxvect(X, dt->axes[1]);
	tmp[2] = ft_intxvect(Y, dt->axes[2]);
	tmp2 = ft_calc_vect(tmp);
	tmp2 = ft_norm_vect(tmp2);
	ray->v[0] = tmp2[0];
	ray->v[1] = tmp2[1];
	ray->v[2] = tmp2[2];
	free(tmp[0]);
	free(tmp[1]);
	free(tmp[2]);
	free(tmp);
	free(tmp2);
}
Esempio n. 3
0
void			ft_set_param(t_dt *dt)
{
	float		*tmp;

	dt->foc = 1 / tan(PHI / 2);
	tmp = ft_intxvect(-1, dt->cam_pos);
	tmp = ft_norm_vect(tmp);
	dt->dir[0] = tmp[0];
	dt->dir[1] = tmp[1];
	dt->dir[2] = tmp[2];
	free(tmp);
	ft_get_axes(dt);
}
Esempio n. 4
0
void			ft_set_param(t_dt *dt)
{
	float		*tmp;

	tmp = ft_intxvect(-1, dt->cam_pos);
	tmp = ft_norm_vect(tmp);
	dt->dir[0] = tmp[0];
	dt->dir[1] = tmp[1];
	dt->dir[2] = tmp[2];
	free(tmp);
	ft_get_w(dt);
	ft_get_v(dt);
}
Esempio n. 5
0
float		*ft_refl(float v[3], float n[3])
{
	float	*refl;
	float	prod;

	prod = ft_prod_scal(n, v);
	refl = ft_intxvect(2 * prod, n);
	refl[0] = refl[0] - v[0];
	refl[1] = refl[1] - v[1];
	refl[2] = refl[2] - v[2];
	refl = ft_norm_vect(refl);
	return (refl);
}
Esempio n. 6
0
static void		ft_get_w(t_dt *dt)
{
	float		*tmp;
	float		scal;

	scal = ft_prod_scal(dt->dir, dt->axes[2]);
	tmp = ft_intxvect(scal, dt->dir);
	tmp[0] = dt->axes[2][0] - tmp[0];
	tmp[1] = dt->axes[2][1] - tmp[1];
	tmp[2] = dt->axes[2][2] - tmp[2];
	tmp = ft_norm_vect(tmp);
	dt->mat_w[0] = tmp[0];
	dt->mat_w[1] = tmp[1];
	dt->mat_w[2] = tmp[2];
	free(tmp);
}
Esempio n. 7
0
File: base_ch.c Progetto: rilax17/rt
static float	*ft_mat_z(float v[3], float axes[3][3])
{
    float		*mat_z;
    float		scal;

    scal = ft_prod_scal(v, axes[2]);
    mat_z = ft_intxvect(scal, v);
    mat_z[0] = axes[2][0] - mat_z[0];
    mat_z[1] = axes[2][1] - mat_z[1];
    mat_z[2] = axes[2][2] - mat_z[2];
    if (mat_z[0] == 0 && mat_z[1] == 0 && mat_z[2] == 0)
    {
        mat_z[0] = axes[0][0];
        mat_z[1] = axes[0][1];
        mat_z[2] = axes[0][2];
    }
    mat_z = ft_norm_vect(mat_z);
    return (mat_z);
}