Browse Source

ellipsoid func

place-stuff
alistair 4 years ago
parent
commit
fbc405adc3
  1. 76
      distfuncs.c
  2. 4
      distfuncs.h

76
distfuncs.c

@ -7,6 +7,71 @@ @@ -7,6 +7,71 @@
#define HARD_LIGHT 2
#define WHITE_LIGHT 2
double divid_fp(double a, double b) {
return a / b;
}
/*
*
* float sdEllipsoid( vec3 p, vec3 r )
{
float k0 = length(p/r);
float k1 = length(p/(r*r));
return k0*(k0-1.0)/k1;
}
*
*/
double sdf_4ellipsoid(struct vec *x) {
double r = 1;
struct vec *shape = new_vec4(1.5,3,1,4);
struct vec *v = copy_vec(x);
double dim = 0;
for (int i = 0 ; i < v->dimension; i ++) {
v->elements[i] = v->elements[i] / shape->elements[i];
}
double k0 = magnitude_vec(v);
free_vec(v);
v = copy_vec(x);
for (int i = 0 ; i < v->dimension; i ++) {
v->elements[i] = v->elements[i] / pow(shape->elements[i], 2);
}
double k1 = magnitude_vec(v);
double result = k0 * (k0 - 1.0) / k1;
free_vec(v);
return result;
}
double sdf_3ellipsoid(struct vec *x) {
double r = 1;
struct vec *shape = new_vec3(1.5,3,1);
struct vec *v = copy_vec(x);
double dim = 0;
for (int i = 0 ; i < 3; i ++) {
v->elements[i] = v->elements[i] / shape->elements[i];
}
double k0 = magnitude_vec(v);
free_vec(v);
v = copy_vec(x);
for (int i = 0 ; i < 3; i ++) {
v->elements[i] = v->elements[i] / pow(shape->elements[i], 2);
}
double k1 = magnitude_vec(v);
double result = k0 * (k0 - 1.0) / k1;
free_vec(v);
return result;
}
double sdf_sphere(struct vec *x) {
static const double r = 1.4;
struct vec *v = copy_vec(x);
@ -215,7 +280,9 @@ new_object(struct vec* position, double rotation, double scale, @@ -215,7 +280,9 @@ new_object(struct vec* position, double rotation, double scale,
double (*dist)(struct vec*), struct colour (*col)(struct ray *, struct object *))
{
struct object new_obj;
new_obj.base_col = get_random_color();
struct colour default_col = {.r = 255, .g=255, .b=255, .a=255, .sp=CS_RGB};
new_obj.base_col = default_col;
new_obj.col = col;
new_obj.sol.dist = dist;
new_obj.sol.pos = *position;
@ -231,6 +298,11 @@ struct object new_sphere(struct vec* position, double rotation, double scale) { @@ -231,6 +298,11 @@ struct object new_sphere(struct vec* position, double rotation, double scale) {
return new_object(position, rotation, scale, sdf_sphere, yeet_pho);
}
struct object new_ellipse(struct vec* position, double rotation, double scale) {
return new_object(position, rotation, scale, sdf_3ellipsoid, yeet_pho);
}
struct object new_box(struct vec* position, double rotation, double scale) {
return new_object(position, rotation, scale, sdf_box, yeet_pho);
}
@ -242,4 +314,4 @@ struct object new_cone(struct vec* position, double rotation, double scale) { @@ -242,4 +314,4 @@ struct object new_cone(struct vec* position, double rotation, double scale) {
struct object new_vert_line(struct vec* position, double rotation, double scale) {
return new_object(position, rotation, scale, sdf_phat_vert_line, yeet_pho);
}
}

4
distfuncs.h

@ -16,4 +16,8 @@ double sdf_sphere(struct vec *); @@ -16,4 +16,8 @@ double sdf_sphere(struct vec *);
struct colour yeet_col(struct ray *);
double sdf_3ellipsoid(struct vec *x);
double sdf_4ellipsoid(struct vec *x);
#endif

Loading…
Cancel
Save