Found a hanging input, time to debug.
authorethereal <ethereal@ethv.net>
Wed, 24 Jun 2015 04:14:32 +0000 (04:14 +0000)
committerethereal <ethereal@ethv.net>
Wed, 24 Jun 2015 04:14:32 +0000 (04:14 +0000)
src/ecore/render.c
src/ewrap/main.c

index 3557e58..de9e8f9 100644 (file)
@@ -82,26 +82,36 @@ vector_t trace(vector_t *ray, vector_t *dir, int depth) {
     intersection.c[0] = ray->c[0] + dir->c[0]*min_i;
     intersection.c[1] = ray->c[1] + dir->c[1]*min_i;
     intersection.c[2] = ray->c[2] + dir->c[2]*min_i;
-
-    shm_mat_t *mat = materials + spheres[min_ind].mat;
+    intersection.c[3] = 0.0;
 
     /* Calculate normal. */
     vector_t normal;
     normal.c[0] = intersection.c[0] - spheres[min_ind].x;
     normal.c[1] = intersection.c[1] - spheres[min_ind].y;
     normal.c[2] = intersection.c[2] - spheres[min_ind].z;
+    normal.c[3] = 0.0;
     norm_vector(&normal);
 
     /* Do we need to do a recursive raycast? */
     vector_t ret;
     ret.c[0] = ret.c[1] = ret.c[2] = ret.c[3] = 0.0;
-    if(mat->ref > 0 && depth) {
+
+    shm_mat_t *mat = materials + spheres[min_ind].mat;
+    if(mat->ref > 0 && depth && 0) {
         vector_t r;
-        /* r = n*(2 * n.dot(-dir)) + dir */
+        /* formula: r = d - 2(dn)n */
         mul_vector(&normal, -2 * dot_vectors(&normal, dir), &r);
         add_vectors(&r, dir, &r);
+        norm_vector(&r);
+
+        set_vector(&r, 0.0, 0.0, -1.0, 0.0);
+
+        vector_t rloc;
+        mul_vector(&r, 1000, &rloc);
+        add_vectors(&rloc, &intersection, &rloc);
         
-        ret = trace(&intersection, &r, depth-1);
+        ret = trace(&rloc, &r, depth-1);
+        mul_vector(&ret, mat->ref, &ret);
     }
 
     /* Do lighting calculations for each light. */
@@ -212,7 +222,7 @@ void render_range() {
         norm_vector(&ray_dir);
 
         /* Begin trace */
-        vector_t col = trace(&cam_pos, &ray_dir, 2);
+        vector_t col = trace(&cam_pos, &ray_dir, 3);
 
         /* Write back result into framebuffer. */
         uint32_t result = 0;
index 24cd3a4..42eaf4a 100644 (file)
@@ -81,36 +81,39 @@ int main() {
     material->shininess = 1.0;
     material->sr = material->sg = material->sb = 1.0;
     material->a = material->s = material->d = 1.0;
+    material->ref = 0.0;
+
     material ++;
     material->r = material->b = 0.0;
     material->g = 1.0;
     material->shininess = 1.0;
     material->sr = material->sg = material->sb = 1.0;
     material->a = material->s = material->d = 1.0;
+    material->ref = 0.0;
 
     shm_region->sph_count = 2;
     shm_region->sph_off = shm_region->mat_off + sizeof(*material)*shm_region->mat_count;
     shm_sph_t *sphere = (void *)((uint8_t*)shm_region + shm_region->sph_off);
-    sphere->x = 0.3;
+    sphere->x = 0.5;
     sphere->y = 0.0;
-    sphere->z = 1.1;
-    sphere->r = 0.3;
+    sphere->z = 3.1;
+    sphere->r = 0.5;
     sphere->mat = 0;
 
     sphere ++;
-    sphere->x = -0.3;
+    sphere->x = -0.5;
     sphere->y = 0.0;
-    sphere->z = 1.0;
-    sphere->r = 0.3;
+    sphere->z = 3.1;
+    sphere->r = 0.5;
     sphere->mat = 1;
 
     shm_region->light_count = 1;
     shm_region->light_off = shm_region->sph_off + sizeof(*sphere)*shm_region->sph_count;
     shm_light_t *light = (void *)((uint8_t*)shm_region + shm_region->light_off);
-    light->x = 0;
+    light->x = 1;
     light->y = 0;
     light->z = 0;
-    light->a = 0.3;
+    light->a = 0.0;
     light->d = 1.0;
     light->s = 0.0;
     light->r = 1.0;