From b0dd97ee6bf8d5daa587da40ad941efac68152df Mon Sep 17 00:00:00 2001 From: brett weiland Date: Sat, 1 Jun 2024 01:36:18 -0500 Subject: got raycasting laid out --- src/camera.cuh | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 src/camera.cuh (limited to 'src/camera.cuh') diff --git a/src/camera.cuh b/src/camera.cuh new file mode 100644 index 0000000..4d04fcd --- /dev/null +++ b/src/camera.cuh @@ -0,0 +1,75 @@ +#ifndef CAMERA_H +#define CAMERA_H + +#include "entity.cuh" +#include "common.cuh" +#include + + +//template class scene; + +//I am soooo high lol +class camera : public entity { + public: + __device__ camera(scene *pscene, const T fov = 1, const vect3 pos = make_vect3(0), const vect3 rot = make_vect3(0)) + : pscene(pscene), fov(fov), entity(pos, rot, make_vect3(0)) {}; + private: + T fov; + float2 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 vect3 uv = ((2 * make_vect3(unnormalized_uv)) / make_vect3(gridDim * blockDim)) - 1; + const vect3 ray_direction = normalize(make_vect3(uv.x, uv.y, 1)); + T dist; + T total_dist = 0; + vect3 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