Browse Source

AAAAAAAAAAAA

place-stuff
alistair 4 years ago
parent
commit
c83ddf81fb
  1. 25
      camera.c
  2. 17
      distfuncs.c
  3. 11
      main.c
  4. 6
      scene.c

25
camera.c

@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
#include "distfuncs.h"
#include "camera.h"
#define DRAW_DIST 2550.0
#define DRAW_DIST 255.0
#define MAX_ITERATIONS 255
#define EPSILON 0.1
#define NORMAL_EPSILON 0.0001
@ -30,7 +30,7 @@ double manidist(struct vec *v) @@ -30,7 +30,7 @@ double manidist(struct vec *v)
{
return v->elements[3];
//double yeet = (SDL_GetTicks() / 10);
double yeet = 100;
double yeet = 300;
v->elements[3] -= yeet;
double out = magnitude_vec(v) - yeet;
v->elements[3] += yeet;
@ -67,9 +67,8 @@ estimateNormal(struct vec *r, struct solid *sol) @@ -67,9 +67,8 @@ estimateNormal(struct vec *r, struct solid *sol)
double s1 = solid_dist(sol, tmp);
tmp->elements[i] = -NORMAL_EPSILON;
double s2 = solid_dist(sol, tmp);
out->elements[i] = s1 - s2;
tmp->elements[i] = 0;
out->elements[i] = s1 - s2;
}
free_vec(tmp);
return normalise_vec_ip(out);
@ -186,8 +185,9 @@ manifoldstep(struct ray *r, double distance) @@ -186,8 +185,9 @@ manifoldstep(struct ray *r, double distance)
manifoldturn(r, r->dir, distance);
}
void place(struct solid *v) {
struct vec *dirs [v->pos.dimension];
void
place(struct solid *v) {
struct vec **dirs = malloc(sizeof(struct vec *) * v->pos.dimension);
for (int d = 0; d < v->pos.dimension; d++) {
dirs[d] = new_vec(v->pos.dimension);
dirs[d]->elements[d] = 1;
@ -197,11 +197,18 @@ void place(struct solid *v) { @@ -197,11 +197,18 @@ void place(struct solid *v) {
for (int d = 0; d < v->pos.dimension; d++) {
for (double yee = v->pos.elements[d]; dabs(yee) > EPSILON; yee -= dsign(yee) * EPSILON) {
manifoldstepaxees(tpos, dirs[d], dirs, v->pos.dimension, EPSILON);
struct vec *temp = copy_vec(dirs[d]);
manifoldstepaxees(tpos, temp, dirs, v->pos.dimension, EPSILON);
free_vec(temp);
}
tpos->elements[d] = v->pos.elements[d];
}
v->pos.elements = tpos->elements;
free(tpos);
free_vec(tdir);
free_vec(tpos);
for (int d = 0; d < v->pos.dimension; d++) free_vec(dirs[d]);
free(dirs);
}
@ -269,7 +276,7 @@ process_pixel(int i, int j) @@ -269,7 +276,7 @@ process_pixel(int i, int j)
{
struct ray r = (struct ray) {
.pos = new_vec(4),
.dir = normalise_vec_ip(new_vec4(i - B_INTERNAL_WIDTH/2, j - B_INTERNAL_HEIGHT/2, 50, 0))
.dir = normalise_vec_ip(new_vec4(i - B_INTERNAL_WIDTH/2, j - B_INTERNAL_HEIGHT/2, 100, 0))
};
struct pixel_info p = march(&r, scene_object);

17
distfuncs.c

@ -68,6 +68,7 @@ double sdf_3ellipsoid(struct vec *x) { @@ -68,6 +68,7 @@ double sdf_3ellipsoid(struct vec *x) {
double result = k0 * (k0 - 1.0) / k1;
free_vec(v);
free_vec(shape);
return result;
}
@ -329,7 +330,12 @@ struct colour yeet_whit(struct ray *ray, struct object* obj) { @@ -329,7 +330,12 @@ struct colour yeet_whit(struct ray *ray, struct object* obj) {
}
struct colour yeet_green(struct ray *ray, struct object* obj) {
struct colour c = {.r = 0, .g = 255, .b = 0, .a = 255, .sp=CS_RGB};
struct colour c = {.r = 0, .g = (rand() % 127) + 127, .b = 0, .a = 255, .sp=CS_RGB};
return c;
}
struct colour yeet_brown(struct ray *ray, struct object* obj) {
struct colour c = {.r = 210, .g = 105, .b = 30, .sp=CS_RGB};
return c;
}
@ -341,13 +347,12 @@ struct colour yeet_green(struct ray *ray, struct object* obj) { @@ -341,13 +347,12 @@ struct colour yeet_green(struct ray *ray, struct object* obj) {
* tree (trunk and leaves). Iterate over the array when adding to a scene.
*/
struct object* new_tree(struct vec* position, double rotation, double scale) {
srand(10);
struct object* tree = malloc(2 * sizeof(struct object));
struct object trunk = new_object(position, rotation, scale, sdf_phat_vert_line, yeet_pho);
trunk.base_col = (struct colour){.r = random() % 200, .g = 50 + random() % 100, .b = random() % 200, .sp = CS_RGB};
struct object trunk = new_object(position, rotation, scale, sdf_phat_vert_line, yeet_brown);
trunk.base_col = (struct colour){.r = 210, .g = 105, .b = 30, .sp = CS_RGB};
struct vec* leaf_pos = add_vec_ip(new_vec3(0, -0.75, 0), position);
struct object leaves = new_object(leaf_pos, rotation, scale, sdf_sphere, yeet_pho);
struct vec* leaf_pos = add_vec_ip(new_vec3(0, -1.5, 0), position);
struct object leaves = new_object(leaf_pos, rotation, scale, sdf_3ellipsoid, yeet_green);
leaves.base_col = (struct colour){.r = 0, .g = 255, .b = 0, .sp = CS_RGB};
leaves.base_col = (struct colour){.r = random() % 20, .g = 50 + random() % 100, .b = random() % 20, .sp = CS_RGB};

11
main.c

@ -152,14 +152,15 @@ void setup_camera_scene() @@ -152,14 +152,15 @@ void setup_camera_scene()
// struct object other_white_sphere = new_sphere(new_vec3(0.75, 0, 8), 0, 1);
const double lower_pos_bound = -5;
const double upper_pos_bound = 1;
const double upper_pos_bound = 5;
//const double upper_pos_bound = 5;
const int num_trees = 4;
int lastelem = 1;
int lastelem = 0;
struct object* scene_objects = malloc((lastelem + 2 * num_trees) * sizeof(struct object));
struct vec *plane_pos = new_vec4(0,1,-5,0);
scene_objects[0] = new_plane(plane_pos, 1, 1);
// struct vec *plane_pos = new_vec4(0,1,-5,0);
// scene_objects[0] = new_plane(plane_pos, 1, 1);
for (int i = lastelem; i < lastelem + 2 * num_trees; i+=2) {
struct vec* random_pos = new_random_vec(3, lower_pos_bound, upper_pos_bound);
@ -170,7 +171,7 @@ void setup_camera_scene() @@ -170,7 +171,7 @@ void setup_camera_scene()
scene_objects[i + 1] = tree[1];
}
scene_object = new_scene(2 * num_trees, scene_objects);
scene_object = new_scene(2 * num_trees + lastelem, scene_objects);
scene_object->sol.pos.dimension = 3;
scene_object->sol.pos.elements = camera->pos->elements;
}

6
scene.c

@ -47,9 +47,9 @@ new_scene(int num_scene_objects, struct object* scene_objects) @@ -47,9 +47,9 @@ new_scene(int num_scene_objects, struct object* scene_objects)
scene.num_objects = num_scene_objects;
scene.objects = scene_objects;
// for (int i = 0; i < num_scene_objects; i++) {
// place(&(scene.objects[i].sol));
// }
for (int i = 0; i < num_scene_objects; i++) {
place(&(scene.objects[i].sol));
}
struct object *scene_rep = malloc(sizeof(struct object));
scene_rep->sol.dist = distance_function;

Loading…
Cancel
Save