Basic render loop is taking shape. Digging back into the
raycasting will be slightly annoying
This commit is contained in:
@@ -3,11 +3,10 @@
|
|||||||
#include <Ray.h>
|
#include <Ray.h>
|
||||||
|
|
||||||
|
|
||||||
RayCaster::RayCaster(Map *map,
|
RayCaster::RayCaster(
|
||||||
|
Map *map,
|
||||||
sf::Vector3<int> map_dimensions,
|
sf::Vector3<int> map_dimensions,
|
||||||
sf::Vector2<int> viewport_resolution,
|
sf::Vector2<int> viewport_resolution ) {
|
||||||
sf::Vector3<float> camera_direction,
|
|
||||||
sf::Vector3<float> camera_position) {
|
|
||||||
|
|
||||||
// Override values
|
// Override values
|
||||||
//this.map_dimensions = new Vector3<int> (50, 50, 50);
|
//this.map_dimensions = new Vector3<int> (50, 50, 50);
|
||||||
@@ -17,16 +16,12 @@ RayCaster::RayCaster(Map *map,
|
|||||||
|
|
||||||
|
|
||||||
this->map_dimensions = map_dimensions;
|
this->map_dimensions = map_dimensions;
|
||||||
map = map;
|
this->map = map;
|
||||||
|
|
||||||
resolution = viewport_resolution;
|
resolution = viewport_resolution;
|
||||||
image = new sf::Uint8[resolution.x, resolution.y];
|
image = new sf::Color[resolution.x, resolution.y];
|
||||||
|
|
||||||
|
|
||||||
this->camera_direction = camera_direction;
|
|
||||||
camera_direction_cartesian = Normalize(SphereToCart(camera_direction));
|
|
||||||
|
|
||||||
this->camera_position = camera_position;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,7 +31,13 @@ RayCaster::~RayCaster() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
sf::Uint8* RayCaster::Cast() {
|
sf::Color* RayCaster::CastRays(sf::Vector3<float> camera_direction, sf::Vector3<float> camera_position) {
|
||||||
|
|
||||||
|
// Setup the camera for this cast
|
||||||
|
this->camera_direction = camera_direction;
|
||||||
|
camera_direction_cartesian = Normalize(SphereToCart(camera_direction));
|
||||||
|
this->camera_position = camera_position;
|
||||||
|
|
||||||
|
|
||||||
// The radian increment each ray is spaced from one another
|
// The radian increment each ray is spaced from one another
|
||||||
double y_increment_radians = DegreesToRadians(40.0 / resolution.y);
|
double y_increment_radians = DegreesToRadians(40.0 / resolution.y);
|
||||||
|
|||||||
@@ -7,13 +7,11 @@ class RayCaster {
|
|||||||
public:
|
public:
|
||||||
RayCaster(Map *map,
|
RayCaster(Map *map,
|
||||||
sf::Vector3<int> map_dimensions,
|
sf::Vector3<int> map_dimensions,
|
||||||
sf::Vector2<int> viewport_resolution,
|
sf::Vector2<int> viewport_resolution);
|
||||||
sf::Vector3<float> camera_direction,
|
|
||||||
sf::Vector3<float> camera_position);
|
|
||||||
~RayCaster();
|
~RayCaster();
|
||||||
|
|
||||||
|
|
||||||
sf::Uint8* Cast();
|
sf::Color* CastRays(sf::Vector3<float> camera_direction, sf::Vector3<float> camera_position);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@@ -24,7 +22,7 @@ private:
|
|||||||
sf::Vector2<int> resolution;
|
sf::Vector2<int> resolution;
|
||||||
|
|
||||||
// The pixel array, maybe do RBGA? Are there even 4 byte data types?
|
// The pixel array, maybe do RBGA? Are there even 4 byte data types?
|
||||||
sf::Uint8 *image;
|
sf::Color *image;
|
||||||
|
|
||||||
// The direction of the camera in POLAR coordinates
|
// The direction of the camera in POLAR coordinates
|
||||||
sf::Vector3<float> camera_direction;
|
sf::Vector3<float> camera_direction;
|
||||||
|
|||||||
@@ -6,14 +6,15 @@ class Map {
|
|||||||
public:
|
public:
|
||||||
Map(sf::Vector3i dim) {
|
Map(sf::Vector3i dim) {
|
||||||
list = new char[dim.x * dim.y * dim.z];
|
list = new char[dim.x * dim.y * dim.z];
|
||||||
|
dimensions = dim;
|
||||||
}
|
}
|
||||||
|
|
||||||
~Map() {
|
~Map() {
|
||||||
}
|
}
|
||||||
|
|
||||||
sf::Vector3<int> getDimensions();
|
sf::Vector3i getDimensions();
|
||||||
char *list;
|
char *list;
|
||||||
|
sf::Vector3i dimensions;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <SFML/System/Vector3.hpp>
|
#include <SFML/System/Vector3.hpp>
|
||||||
|
|
||||||
sf::Vector3<int> Map::getDimensions() {
|
sf::Vector3i Map::getDimensions() {
|
||||||
throw std::logic_error("The method or operation is not implemented.");
|
return dimensions;
|
||||||
}
|
}
|
||||||
41
src/main.cpp
41
src/main.cpp
@@ -3,6 +3,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include "util.hpp"
|
#include "util.hpp"
|
||||||
|
#include "../build/RayCaster.h"
|
||||||
|
|
||||||
const int WINDOW_X = 600;
|
const int WINDOW_X = 600;
|
||||||
const int WINDOW_Y = 800;
|
const int WINDOW_Y = 800;
|
||||||
@@ -22,13 +23,11 @@ float elap_time(){
|
|||||||
return elapsed_time.count();
|
return elapsed_time.count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sf::Sprite window_sprite;
|
||||||
|
sf::Texture window_texture;
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
|
||||||
|
|
||||||
sf::Uint8 c;
|
|
||||||
std::cout << sizeof(c);
|
|
||||||
|
|
||||||
|
|
||||||
// Initialize the render window
|
// Initialize the render window
|
||||||
sf::RenderWindow window(sf::VideoMode(WINDOW_X, WINDOW_Y), "SFML");
|
sf::RenderWindow window(sf::VideoMode(WINDOW_X, WINDOW_Y), "SFML");
|
||||||
|
|
||||||
@@ -45,6 +44,25 @@ int main() {
|
|||||||
|
|
||||||
fps_counter fps;
|
fps_counter fps;
|
||||||
|
|
||||||
|
// ============================= RAYCASTER SETUP ==================================
|
||||||
|
|
||||||
|
// Setup the sprite and texture
|
||||||
|
window_texture.create(WINDOW_X, WINDOW_Y);
|
||||||
|
window_sprite.setPosition(0, 0);
|
||||||
|
|
||||||
|
// State values
|
||||||
|
sf::Vector3i map_dim(100, 100, 100);
|
||||||
|
sf::Vector2i view_res(200, 200);
|
||||||
|
sf::Vector3f cam_dir(1.0f, 0.0f, 1.57f);
|
||||||
|
sf::Vector3f cam_pos(10, 10, 10);
|
||||||
|
|
||||||
|
Map* map = new Map(map_dim);
|
||||||
|
RayCaster ray_caster(map, map_dim, view_res);
|
||||||
|
|
||||||
|
|
||||||
|
// ===============================================================================
|
||||||
|
|
||||||
|
|
||||||
while (window.isOpen()) {
|
while (window.isOpen()) {
|
||||||
|
|
||||||
// Poll for events from the user
|
// Poll for events from the user
|
||||||
@@ -86,9 +104,20 @@ int main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Rendering code goes here
|
|
||||||
window.clear(sf::Color::Black);
|
window.clear(sf::Color::Black);
|
||||||
|
|
||||||
|
// Cast the rays and get the image
|
||||||
|
sf::Color* pixel_colors = ray_caster.CastRays(cam_dir, cam_pos);
|
||||||
|
|
||||||
|
/*for (int i = 0; i < img_size; i++) {
|
||||||
|
pixel_colors[i] = sf::Color::Green;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
auto out = (sf::Uint8*)pixel_colors;
|
||||||
|
window_texture.update(out);
|
||||||
|
window_sprite.setTexture(window_texture);
|
||||||
|
window.draw(window_sprite);
|
||||||
|
|
||||||
// Give the frame counter the frame time and draw the average frame time
|
// Give the frame counter the frame time and draw the average frame time
|
||||||
fps.frame(delta_time);
|
fps.frame(delta_time);
|
||||||
fps.draw(&window);
|
fps.draw(&window);
|
||||||
|
|||||||
Reference in New Issue
Block a user