From 093200a449ea38952de52012e324036c106e294b Mon Sep 17 00:00:00 2001 From: Brett Weiland Date: Mon, 27 May 2024 20:56:59 -0500 Subject: boutta switch away from templates --- camera.cuh | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 camera.cuh (limited to 'camera.cuh') diff --git a/camera.cuh b/camera.cuh new file mode 100644 index 0000000..61944fe --- /dev/null +++ b/camera.cuh @@ -0,0 +1,81 @@ +#ifndef CAMERA_H +#define CAMERA_H + +#include "entity.cuh" +#include "common.cuh" +#include + + +//template class scene; + +//I am soooo high lol +template +class camera : public entity { + using T3 = typename vect_t3::vect_t; + using T2 = typename vect_t2::vect_t; + public: + __device__ void render(); + __device__ camera(scene *pscene, const T fov = 1, const T3 pos = vect_create(0), const T3 rot = vect_create(0)) + : pscene(pscene), fov(fov), entity(pos, rot, vect_create(0)) {}; + + //__device__ ~camera(); + private: + T fov; + T2 size; + int steps = 100; + T clip_min = .1; + T clip_max = 100; + scene *pscene; +}; + +/** +//later we'll make scenes objects, rn im lazy (TODO) +template __device__ void camera::render() { + //TODO *really* need to clean this up once you get further + //extra dimentions is extra math + //either generisize float3 or stop using this fucking template nonsense + const uint3 unnormalized_uv = ((blockDim * blockIdx) + threadIdx); + const unsigned int img_index = (unnormalized_uv.x + (unnormalized_uv.y * blockDim.x * gridDim.x)) * 4; + const T3 uv = ((2 * vect_create(unnormalized_uv)) / vect_create(gridDim * blockDim)) - 1; + const T3 ray_direction = normalize(vect_create(uv.x, uv.y, 1)); + T dist; + T total_dist = 0; + T3 ray; + int i; + + + //if(img_index == 640) { printf("%f, %f, %f\n", uv.x, uv.y, uv.z); } + + T min_dist = clip_max; + + render_object **objs = pscene->get_objs(); + for(i = 0; i < steps; i++) { + ray = this->pos_ + (total_dist * ray_direction); + //gyagh memory lookups + for(unsigned int oi = 0; objs[oi] != NULL; oi++) { + dist = object.distance_estimator(ray); + } + if((dist < clip_min)) { + //image[img_index] = 0xff; + break; + } + if((dist > clip_max)) { + //image[img_index+2] = 0xff; + break; + } + total_dist += dist; + } + + + + + //image[img_index] = 0x00; + //image[img_index+1] = 0x00; + //image[img_index+2] = p; + //image[img_index+3] = 0xff; + +} +**/ + + +#endif -- cgit v1.2.3