All pastes #462045 Raw Edit

Stuff

public text v1 · immutable
#462045 ·published 2007-04-28 00:40 UTC
rendered paste body
Color lightPoint(Object *obj, Vector *hitPt, Vector *norm, Scene *scene) {
   // Set temp color to black
   Color tempCol;
   tempCol.x = 0;
   tempCol.y = 0;
   tempCol.z = 0;
   Hit tempHit;
   Ray *shadow;
   shadow = malloc(sizeof(Ray));

   // Find lights
   node_t *node = scene->lights->head;
   while (node != NULL) {
      assert(node->data);
      Object *temp = (Object *)(node->data);

         // Add ambient light coloring
         tempCol.x += temp->ambient.x + obj->ambient.x;
         tempCol.y += temp->ambient.y + obj->ambient.y;
         tempCol.z += temp->ambient.z + obj->ambient.z;

         // "Shadow ray"
         shadow->p.x = hitPt->x;
         shadow->p.y = hitPt->y;
         shadow->p.z = hitPt->z;
         Vector *temp2 = (Vector *)temp->priv; // prevent dereference error
         shadow->dir.x = temp2->x;
         shadow->dir.y = temp2->y;
         shadow->dir.z = temp2->z;

         shadow->dir = v3Diff(temp2, hitPt); // Light location - hit point
         shadow->dir = v3Unitvec(&shadow->dir); // Set the direction as a unit vector

         /* Check for a hit */
         tempHit = intersectObjects(scene, shadow);
         if(tempHit.obj == NULL) {
            tempCol.x += obj->diffuse.x;
            tempCol.y += obj->diffuse.y;
            tempCol.z += obj->diffuse.z;
         } // if
      node = node->next;
   } // while

   free(shadow);
   return tempCol;

} // lightPoint