Turned off experimental phong lighting in the kernel

fixed all compiler errors thrown by MSVC
Switched experimental octree map back to the old map
Refactored old map system, prettied it up
This commit is contained in:
MitchellHansen
2016-10-29 00:42:49 -07:00
parent 391dc63ec8
commit 561c07c602
11 changed files with 587 additions and 284 deletions

View File

@@ -1,9 +1,3 @@
#include <iostream>
#include <chrono>
#include <fstream>
#include <sstream>
#include <SFML/Graphics.hpp>
#ifdef linux
#include <CL/cl.h>
#include <CL/opencl.h>
@@ -25,7 +19,14 @@
#include <OpenCL/cl_ext.h>
#endif
#include "Map.h"
#include <iostream>
#include <chrono>
#include <fstream>
#include <sstream>
#include <SFML/Graphics.hpp>
#include "Old_Map.h"
#include "Curses.h"
#include "util.hpp"
#include "RayCaster.h"
@@ -52,7 +53,7 @@ float elap_time(){
std::chrono::time_point<std::chrono::system_clock> now = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_time = now - start;
return elapsed_time.count();
return static_cast<float>(elapsed_time.count());
}
sf::Sprite window_sprite;
@@ -64,299 +65,296 @@ sf::Texture window_texture;
int main() {
sf::RenderWindow window(sf::VideoMode(WINDOW_X, WINDOW_Y), "SFML");
CL_Wrapper c;
//Map m(sf::Vector3i (50, 50, 50));
//m.generate_octree();
return 1;
if (c.compile_kernel("../kernels/ray_caster_kernel.cl", true, "min_kern") < 0) {
std::cin.get();
return -1;
}
std::cout << "map...";
sf::Vector3i map_dim(MAP_X, MAP_Y, MAP_Z);
Old_Map* map = new Old_Map(map_dim);
map->generate_terrain();
c.create_buffer("map_buffer", sizeof(char) * map_dim.x * map_dim.y * map_dim.z, map->get_voxel_data());
c.create_buffer("dim_buffer", sizeof(int) * 3, &map_dim);
//sf::RenderWindow window(sf::VideoMode(WINDOW_X, WINDOW_Y), "SFML");
sf::Vector2i view_res(WINDOW_X, WINDOW_Y);
c.create_buffer("res_buffer", sizeof(int) * 2, &view_res);
//if (c.compile_kernel("../kernels/ray_caster_kernel.cl", true, "min_kern") < 0) {
// std::cin.get();
// return -1;
//}
//
//std::cout << "map...";
// sf::Vector3i map_dim(MAP_X, MAP_Y, MAP_Z);
// Map* map = new Map(map_dim);
//
//c.create_buffer("map_buffer", sizeof(char) * map_dim.x * map_dim.y * map_dim.z, map->list);
//c.create_buffer("dim_buffer", sizeof(int) * 3, &map_dim);
double y_increment_radians = DegreesToRadians(50.0f / view_res.y);
double x_increment_radians = DegreesToRadians(80.0f / view_res.x);
//sf::Vector2i view_res(WINDOW_X, WINDOW_Y);
//c.create_buffer("res_buffer", sizeof(int) * 2, &view_res);
//
std::cout << "view matrix...";
sf::Vector4f* view_matrix = new sf::Vector4f[WINDOW_X * WINDOW_Y * 4];
// double y_increment_radians = DegreesToRadians(50.0 / view_res.y);
// double x_increment_radians = DegreesToRadians(80.0 / view_res.x);
for (int y = -view_res.y / 2; y < view_res.y / 2; y++) {
for (int x = -view_res.x / 2; x < view_res.x / 2; x++) {
//std::cout << "view matrix...";
//
//sf::Vector4f* view_matrix = new sf::Vector4f[WINDOW_X * WINDOW_Y * 4];
// The base ray direction to slew from
sf::Vector3f ray(1, 0, 0);
// for (int y = -view_res.y / 2; y < view_res.y / 2; y++) {
// for (int x = -view_res.x / 2; x < view_res.x / 2; x++) {
// // The base ray direction to slew from
// sf::Vector3f ray(1, 0, 0);
// // Y axis, pitch
// ray = sf::Vector3f(
// ray.z * sin(y_increment_radians * y) + ray.x * cos(y_increment_radians * y),
// ray.y,
// ray.z * cos(y_increment_radians * y) - ray.x * sin(y_increment_radians * y)
// );
// Y axis, pitch
ray = sf::Vector3f(
static_cast<float>(ray.z * sin(y_increment_radians * y) + ray.x * cos(y_increment_radians * y)),
static_cast<float>(ray.y),
static_cast<float>(ray.z * cos(y_increment_radians * y) - ray.x * sin(y_increment_radians * y))
);
// // Z axis, yaw
// ray = sf::Vector3f(
// ray.x * cos(x_increment_radians * x) - ray.y * sin(x_increment_radians * x),
// ray.x * sin(x_increment_radians * x) + ray.y * cos(x_increment_radians * x),
// ray.z
// );
//
// int index = (x + view_res.x / 2) + view_res.x * (y + view_res.y / 2);
// ray = Normalize(ray);
// Z axis, yaw
ray = sf::Vector3f(
static_cast<float>(ray.x * cos(x_increment_radians * x) - ray.y * sin(x_increment_radians * x)),
static_cast<float>(ray.x * sin(x_increment_radians * x) + ray.y * cos(x_increment_radians * x)),
static_cast<float>(ray.z)
);
int index = (x + view_res.x / 2) + view_res.x * (y + view_res.y / 2);
ray = Normalize(ray);
// view_matrix[index] = sf::Vector4f(
// ray.x,
// ray.y,
// ray.z,
// 0
// );
// }
// }
view_matrix[index] = sf::Vector4f(
ray.x,
ray.y,
ray.z,
0
);
}
}
//c.create_buffer("view_matrix_buffer", sizeof(float) * 4 * view_res.x * view_res.y, view_matrix);
c.create_buffer("view_matrix_buffer", sizeof(float) * 4 * view_res.x * view_res.y, view_matrix);
//Camera camera(
// sf::Vector3f(70, 60, 50),
// sf::Vector2f(0.0f, 1.00f)
//);
//
//c.create_buffer("cam_dir_buffer", sizeof(float) * 4, (void*)camera.get_direction_pointer(), CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR);
//c.create_buffer("cam_pos_buffer", sizeof(float) * 4, (void*)camera.get_position_pointer(), CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR);
//
//int light_count = 2;
//c.create_buffer("light_count_buffer", sizeof(int), &light_count);
Camera camera(
sf::Vector3f(70, 60, 50),
sf::Vector2f(0.0f, 1.00f)
);
c.create_buffer("cam_dir_buffer", sizeof(float) * 4, (void*)camera.get_direction_pointer(), CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR);
c.create_buffer("cam_pos_buffer", sizeof(float) * 4, (void*)camera.get_position_pointer(), CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR);
int light_count = 2;
c.create_buffer("light_count_buffer", sizeof(int), &light_count);
//// {r, g, b, i, x, y, z, x', y', z'}
//sf::Vector3f v = Normalize(sf::Vector3f(1.0, 0.0, 0.0));
//sf::Vector3f v2 = Normalize(sf::Vector3f(1.1, 0.4, 0.7));
//float light[] = { 0.4, 0.8, 0.1, 1, 50, 50, 50, v.x, v.y, v.z,
// 0.4, 0.8, 0.1, 1, 50, 50, 50, v2.x, v2.y, v2.z};
//c.create_buffer("light_buffer", sizeof(float) * 10 * light_count, light, CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR);
// {r, g, b, i, x, y, z, x', y', z'}
sf::Vector3f v = Normalize(sf::Vector3f(1.0f, 0.0f, 0.0f));
sf::Vector3f v2 = Normalize(sf::Vector3f(1.1f, 0.4f, 0.7f));
float light[] = { 0.4f, 0.8f, 0.1f, 1.0f, 50.0f, 50.0f, 50.0f, v.x, v.y, v.z,
0.4f, 0.8f, 0.1f, 1.0f, 50.0f, 50.0f, 50.0f, v2.x, v2.y, v2.z};
c.create_buffer("light_buffer", sizeof(float) * 10 * light_count, light, CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR);
//// The drawing canvas
// unsigned char* pixel_array = new sf::Uint8[WINDOW_X * WINDOW_Y * 4];
// The drawing canvas
unsigned char* pixel_array = new sf::Uint8[WINDOW_X * WINDOW_Y * 4];
// for (int i = 0; i < WINDOW_X * WINDOW_Y * 4; i += 4) {
for (int i = 0; i < WINDOW_X * WINDOW_Y * 4; i += 4) {
// pixel_array[i] = 255; // R?
// pixel_array[i + 1] = 255; // G?
// pixel_array[i + 2] = 255; // B?
// pixel_array[i + 3] = 100; // A?
// }
pixel_array[i] = 255; // R?
pixel_array[i + 1] = 255; // G?
pixel_array[i + 2] = 255; // B?
pixel_array[i + 3] = 100; // A?
}
//sf::Texture t;
// t.create(WINDOW_X, WINDOW_Y);
// t.update(pixel_array);
sf::Texture t;
t.create(WINDOW_X, WINDOW_Y);
t.update(pixel_array);
// int error;
// cl_mem image_buff = clCreateFromGLTexture(
// c.getContext(), CL_MEM_WRITE_ONLY, GL_TEXTURE_2D,
// 0, t.getNativeHandle(), &error);
int error;
cl_mem image_buff = clCreateFromGLTexture(
c.getContext(), CL_MEM_WRITE_ONLY, GL_TEXTURE_2D,
0, t.getNativeHandle(), &error);
// if (c.assert(error, "clCreateFromGLTexture"))
// return -1;
if (c.assert(error, "clCreateFromGLTexture"))
return -1;
// c.store_buffer(image_buff, "image_buffer");
c.store_buffer(image_buff, "image_buffer");
// c.set_kernel_arg("min_kern", 0, "map_buffer");
// c.set_kernel_arg("min_kern", 1, "dim_buffer");
// c.set_kernel_arg("min_kern", 2, "res_buffer");
// c.set_kernel_arg("min_kern", 3, "view_matrix_buffer");
// c.set_kernel_arg("min_kern", 4, "cam_dir_buffer");
// c.set_kernel_arg("min_kern", 5, "cam_pos_buffer");
//c.set_kernel_arg("min_kern", 6, "light_buffer");
//c.set_kernel_arg("min_kern", 7, "light_count_buffer");
//c.set_kernel_arg("min_kern", 8, "image_buffer");
c.set_kernel_arg("min_kern", 0, "map_buffer");
c.set_kernel_arg("min_kern", 1, "dim_buffer");
c.set_kernel_arg("min_kern", 2, "res_buffer");
c.set_kernel_arg("min_kern", 3, "view_matrix_buffer");
c.set_kernel_arg("min_kern", 4, "cam_dir_buffer");
c.set_kernel_arg("min_kern", 5, "cam_pos_buffer");
c.set_kernel_arg("min_kern", 6, "light_buffer");
c.set_kernel_arg("min_kern", 7, "light_count_buffer");
c.set_kernel_arg("min_kern", 8, "image_buffer");
//sf::Sprite s;
//s.setTexture(t);
//s.setPosition(0, 0);
sf::Sprite s;
s.setTexture(t);
s.setPosition(0, 0);
// // The step size in milliseconds between calls to Update()
// // Lets set it to 16.6 milliseonds (60FPS)
// float step_size = 0.0166f;
// The step size in milliseconds between calls to Update()
// Lets set it to 16.6 milliseonds (60FPS)
float step_size = 0.0166f;
// // Timekeeping values for the loop
// double frame_time = 0.0,
// elapsed_time = 0.0,
// delta_time = 0.0,
// accumulator_time = 0.0,
// current_time = 0.0;
// Timekeeping values for the loop
double frame_time = 0.0,
elapsed_time = 0.0,
delta_time = 0.0,
accumulator_time = 0.0,
current_time = 0.0;
// fps_counter fps;
fps_counter fps;
//// ============================= RAYCASTER SETUP ==================================
// ============================= RAYCASTER SETUP ==================================
//// Setup the sprite and texture
//window_texture.create(WINDOW_X, WINDOW_Y);
//window_sprite.setPosition(0, 0);
// Setup the sprite and texture
window_texture.create(WINDOW_X, WINDOW_Y);
window_sprite.setPosition(0, 0);
//// State values
// State values
//sf::Vector3f cam_vec(0, 0, 0);
sf::Vector3f cam_vec(0, 0, 0);
//RayCaster ray_caster(map, map_dim, view_res);
//sf::Vector2f *dp = camera.get_direction_pointer();
//debug_text cam_text_x(1, 30, &dp->x, "X: ");
//debug_text cam_text_y(2, 30, &dp->y, "Y: ");
sf::Vector2f *dp = camera.get_direction_pointer();
debug_text cam_text_x(1, 30, &dp->x, "X: ");
debug_text cam_text_y(2, 30, &dp->y, "Y: ");
//sf::Vector3f *mp = camera.get_movement_pointer();
//debug_text cam_text_mov_x(4, 30, &mp->x, "X: ");
//debug_text cam_text_mov_y(5, 30, &mp->y, "Y: ");
//debug_text cam_text_mov_z(6, 30, &mp->y, "Z: ");
////debug_text cam_text_z(3, 30, &p->z);
sf::Vector3f *mp = camera.get_movement_pointer();
debug_text cam_text_mov_x(4, 30, &mp->x, "X: ");
debug_text cam_text_mov_y(5, 30, &mp->y, "Y: ");
debug_text cam_text_mov_z(6, 30, &mp->y, "Z: ");
//debug_text cam_text_z(3, 30, &p->z);
//debug_text light_x(7, 30, &light[7], "X: ");
//debug_text light_y(8, 30, &light[8], "Y: ");
//debug_text light_z(9, 30, &light[9], "Z: ");
//// ===============================================================================
debug_text light_x(7, 30, &light[7], "X: ");
debug_text light_y(8, 30, &light[8], "Y: ");
debug_text light_z(9, 30, &light[9], "Z: ");
// ===============================================================================
//// Mouse capture
//sf::Vector2i deltas;
//sf::Vector2i fixed(window.getSize());
//bool mouse_enabled = true;
// Mouse capture
sf::Vector2i deltas;
sf::Vector2i fixed(window.getSize());
bool mouse_enabled = true;
//sf::Vector3f cam_mov_vec;
sf::Vector3f cam_mov_vec;
//while (window.isOpen()) {
while (window.isOpen()) {
// // Poll for events from the user
// sf::Event event;
// while (window.pollEvent(event)) {
// Poll for events from the user
sf::Event event;
while (window.pollEvent(event)) {
// // If the user tries to exit the application via the GUI
// if (event.type == sf::Event::Closed)
// window.close();
// if (event.type == sf::Event::KeyPressed) {
// if (event.key.code == sf::Keyboard::Space) {
// if (mouse_enabled)
// mouse_enabled = false;
// else
// mouse_enabled = true;
// }
// }
// }
// If the user tries to exit the application via the GUI
if (event.type == sf::Event::Closed)
window.close();
if (event.type == sf::Event::KeyPressed) {
if (event.key.code == sf::Keyboard::Space) {
if (mouse_enabled)
mouse_enabled = false;
else
mouse_enabled = true;
}
}
}
// cam_vec.x = 0;
// cam_vec.y = 0;
// cam_vec.z = 0;
cam_vec.x = 0;
cam_vec.y = 0;
cam_vec.z = 0;
// float speed = 1.0f;
float speed = 1.0f;
// if (sf::Keyboard::isKeyPressed(sf::Keyboard::LShift)) {
// speed = 0.2f;
// }
// if (sf::Keyboard::isKeyPressed(sf::Keyboard::Q)) {
// camera.add_relative_impulse(Camera::DIRECTION::DOWN, speed);
// }
// if (sf::Keyboard::isKeyPressed(sf::Keyboard::E)) {
// camera.add_relative_impulse(Camera::DIRECTION::UP, speed);
// }
// if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) {
// camera.add_relative_impulse(Camera::DIRECTION::FORWARD, speed);
// }
// if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) {
// camera.add_relative_impulse(Camera::DIRECTION::REARWARD, speed);
// }
// if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) {
// camera.add_relative_impulse(Camera::DIRECTION::LEFT, speed);
// }
// if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) {
// camera.add_relative_impulse(Camera::DIRECTION::RIGHT, speed);
// }
// if (sf::Keyboard::isKeyPressed(sf::Keyboard::T)) {
// camera.set_position(sf::Vector3f(50, 50, 50));
// }
if (sf::Keyboard::isKeyPressed(sf::Keyboard::LShift)) {
speed = 0.2f;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Q)) {
camera.add_relative_impulse(Camera::DIRECTION::DOWN, speed);
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::E)) {
camera.add_relative_impulse(Camera::DIRECTION::UP, speed);
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) {
camera.add_relative_impulse(Camera::DIRECTION::FORWARD, speed);
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) {
camera.add_relative_impulse(Camera::DIRECTION::REARWARD, speed);
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) {
camera.add_relative_impulse(Camera::DIRECTION::LEFT, speed);
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) {
camera.add_relative_impulse(Camera::DIRECTION::RIGHT, speed);
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::T)) {
camera.set_position(sf::Vector3f(50, 50, 50));
}
// camera.add_static_impulse(cam_vec);
camera.add_static_impulse(cam_vec);
// if (mouse_enabled) {
// deltas = fixed - sf::Mouse::getPosition();
// if (deltas != sf::Vector2i(0, 0) && mouse_enabled == true) {
if (mouse_enabled) {
deltas = fixed - sf::Mouse::getPosition();
if (deltas != sf::Vector2i(0, 0) && mouse_enabled == true) {
// // Mouse movement
// sf::Mouse::setPosition(fixed);
// camera.slew_camera(sf::Vector2f(
// deltas.y / 300.0f,
// deltas.x / 300.0f
// ));
// }
// }
// Mouse movement
sf::Mouse::setPosition(fixed);
camera.slew_camera(sf::Vector2f(
deltas.y / 300.0f,
deltas.x / 300.0f
));
}
}
// // Time keeping
// elapsed_time = elap_time();
// delta_time = elapsed_time - current_time;
// current_time = elapsed_time;
// if (delta_time > 0.2f)
// delta_time = 0.2f;
// accumulator_time += delta_time;
// while ((accumulator_time - step_size) >= step_size) {
// accumulator_time -= step_size;
// Time keeping
elapsed_time = elap_time();
delta_time = elapsed_time - current_time;
current_time = elapsed_time;
if (delta_time > 0.2f)
delta_time = 0.2f;
accumulator_time += delta_time;
while ((accumulator_time - step_size) >= step_size) {
accumulator_time -= step_size;
// // ==== DELTA TIME LOCKED ====
// }
// ==== DELTA TIME LOCKED ====
}
// float l[] = {
// light[9] * sin(delta_time / 1) + light[7] * cos(delta_time / 1),
// light[8],
// light[9] * cos(delta_time / 1) - light[7] * sin(delta_time / 1)
// };
float l[] = {
static_cast<float>(light[9] * sin(delta_time / 1) + light[7] * cos(delta_time / 1)),
static_cast<float>(light[8]),
static_cast<float>(light[9] * cos(delta_time / 1) - light[7] * sin(delta_time / 1))
};
// float l2[] = {
// l[0] * cos(delta_time) - l[2] * sin(delta_time),
// l[0] * sin(delta_time) + l[2] * cos(delta_time),
// l[2]
// };
float l2[] = {
static_cast<float>(l[0] * cos(delta_time) - l[2] * sin(delta_time)),
static_cast<float>(l[0] * sin(delta_time) + l[2] * cos(delta_time)),
static_cast<float>(l[2])
};
// light[7] = l[0];
// light[8] = l[1];
// light[9] = l[2];
light[7] = l[0];
light[8] = l[1];
light[9] = l[2];
// // ==== FPS LOCKED ====
// camera.update(delta_time);
// ==== FPS LOCKED ====
camera.update(delta_time);
// // Run the raycast
// c.run_kernel("min_kern", WORK_SIZE);
//
// // ==== RENDER ====
// Run the raycast
c.run_kernel("min_kern", WORK_SIZE);
// ==== RENDER ====
// window.clear(sf::Color::Black);
window.clear(sf::Color::Black);
// window.draw(s);
window.draw(s);
// // Give the frame counter the frame time and draw the average frame time
// fps.frame(delta_time);
// fps.draw(&window);
// Give the frame counter the frame time and draw the average frame time
fps.frame(delta_time);
fps.draw(&window);
// cam_text_x.draw(&window);
// cam_text_y.draw(&window);
cam_text_x.draw(&window);
cam_text_y.draw(&window);
// cam_text_mov_x.draw(&window);
// cam_text_mov_y.draw(&window);
// cam_text_mov_z.draw(&window);
cam_text_mov_x.draw(&window);
cam_text_mov_y.draw(&window);
cam_text_mov_z.draw(&window);
// light_x.draw(&window);
// light_y.draw(&window);
// light_z.draw(&window);
//
// window.display();
light_x.draw(&window);
light_y.draw(&window);
light_z.draw(&window);
window.display();
//}
}
return 0;
}