From c05aa71f402abb3b0f05a40fa61e6159cf87ebd6 Mon Sep 17 00:00:00 2001 From: brett weiland Date: Sat, 1 Jun 2024 16:58:25 -0500 Subject: project is dead --- src/camera.cu | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/camera.cu (limited to 'src/camera.cu') diff --git a/src/camera.cu b/src/camera.cu new file mode 100644 index 0000000..da527b9 --- /dev/null +++ b/src/camera.cu @@ -0,0 +1,44 @@ +#include +#include "camera.cuh" + +__device__ void Camera::render(Scene scene, uint8_t *image) { + const uint3 unnormalized_uv = ((blockDim * blockIdx) + threadIdx); + const unsigned int img_index = (unnormalized_uv.x + (unnormalized_uv.y * blockDim.x * gridDim.x)) * 4; + const vect3 uv = ((2 * make_vect3(unnormalized_uv)) / make_vect3(gridDim * blockDim)) - 1; + Ray ray; + ray.direction = normalize(make_vect3(uv.x, uv.y, 1)); + Render_object **objects = scene.get_objects(); + Render_object *closest_obj; + T total_dist = 0; + Color pcolor; + for(int steps = 0; steps < max_steps; steps++) { + T min_dist = T_MAX; + T dist; + ray.start = this->pos_ + (total_dist * ray.direction); + for(size_t obj_i = 0; objects[obj_i] != nullptr; obj_i++) { + + dist = objects[obj_i]->distance_estimator(ray.start); + if(dist < min_dist) { + min_dist = dist; + if(dist < clip_min) { + steps = max_steps; + pcolor = objects[obj_i]->get_color(ray); + image[img_index+3] = 0xff; + break; + } + if(dist > clip_max) { + steps = max_steps; + image[img_index+3] = 0x00; + break; + } + } + } + total_dist += min_dist; + } + + + //TODO gamma space + image[img_index] = pcolor.x * 255; + image[img_index+1] = pcolor.y * 255; + image[img_index+2] = pcolor.z * 255; +} -- cgit v1.2.3