#pragma once #include #include #include class RayCaster { public: RayCaster(Map *map, sf::Vector3 map_dimensions, sf::Vector2 viewport_resolution); ~RayCaster(); void setFOV(float fov); void setResolution(sf::Vector2 resolution); sf::Color* CastRays(sf::Vector3 camera_direction, sf::Vector3 camera_position); void moveCamera(sf::Vector2f v); private: sf::Vector3 map_dimensions; Map *map; // The XY resolution of the viewport sf::Vector2 resolution; // The pixel array, maybe do RBGA? Are there even 4 byte data types? sf::Color *image; // The direction of the camera in POLAR coordinates sf::Vector3 camera_direction; // Convert the polar coordinates to CARTESIAN sf::Vector3 camera_direction_cartesian; // The world-space position of the camera sf::Vector3 camera_position; // The distance in units the view plane is from the iris point int view_plane_distance = 300; // Precalculated values for the view plane rays sf::Vector3f *view_plane_vectors; };