Some machinations on a config structure as well as a restructure on how

I do logging.
This commit is contained in:
MitchellHansen
2017-09-23 01:06:20 -07:00
parent 2f1adca75d
commit 86f1622090
14 changed files with 1490 additions and 398 deletions

View File

@@ -1,37 +1,53 @@
#include "map/Map.h"
#include "Logger.h"
Map::Map(uint32_t dimensions) {
// ========= TEMP 3D voxel data ===========
srand(time(nullptr));
if ((int)pow(2, (int)log2(dimensions)) != dimensions)
Logger::log("Map dimensions not an even exponent of 2", Logger::LogLevel::ERROR, __LINE__, __FILE__);
voxel_data = new char[dimensions * dimensions * dimensions];
for (uint64_t i = 0; i < dimensions * dimensions * dimensions; i++) {
voxel_data[i] = 1;
}
// randomly set the voxel data for testing
for (uint64_t i = 0; i < dimensions * dimensions * dimensions; i++) {
if (rand() % 25 < 2)
voxel_data[i] = 1;
else
voxel_data[i] = 0;
}
}
sf::Vector3i dim3(dimensions, dimensions, dimensions);
Logger::log("Generating Octree", Logger::LogLevel::INFO);
octree.Generate(voxel_data, dim3);
octree.Validate(voxel_data, dim3);
Logger::log("Validating Octree", Logger::LogLevel::INFO);
if (!octree.Validate(voxel_data, dim3)) {
Logger::log("Octree validation failed", Logger::LogLevel::ERROR, __LINE__, __FILE__);
}
// TODO: Create test with mock octree data and defined test framework
Logger::log("Testing Array vs Octree ray traversal", Logger::LogLevel::INFO);
if (!test_oct_arr_traversal(dim3)) {
Logger::log("Array and Octree traversals DID NOT MATCH!!!", Logger::LogLevel::ERROR, __LINE__, __FILE__);
}
}
bool Map::test_oct_arr_traversal(sf::Vector3i dimensions) {
sf::Vector2f cam_dir(0.95, 0.81);
sf::Vector3f cam_pos(10.5, 10.5, 10.5);
std::vector<std::tuple<sf::Vector3i, char>> list1 = CastRayCharArray(voxel_data, &dim3, &cam_dir, &cam_pos);
std::vector<std::tuple<sf::Vector3i, char>> list2 = CastRayOctree(&octree, &dim3, &cam_dir, &cam_pos);
std::vector<std::tuple<sf::Vector3i, char>> list1 = CastRayCharArray(voxel_data, &dimensions, &cam_dir, &cam_pos);
std::vector<std::tuple<sf::Vector3i, char>> list2 = CastRayOctree(&octree, &dimensions, &cam_dir, &cam_pos);
return;
if (list1 != list2) {
return false;
} else {
return true;
}
}
@@ -45,6 +61,7 @@ char Map::getVoxel(sf::Vector3i pos){
return octree.GetVoxel(pos).found;
}
std::vector<std::tuple<sf::Vector3i, char>> Map::CastRayCharArray(
char* map,
sf::Vector3i* map_dim,
@@ -243,8 +260,6 @@ std::vector<std::tuple<sf::Vector3i, char>> Map::CastRayOctree(
// Andrew Woo's raycasting algo
do {
// check which direction we step in
face_mask.x = intersection_t.x <= std::min(intersection_t.y, intersection_t.z);
face_mask.y = intersection_t.y <= std::min(intersection_t.z, intersection_t.x);

View File

@@ -36,8 +36,6 @@ void Octree::Generate(char* data, sf::Vector3i dimensions) {
DumpLog(&output_stream, "raw_data.txt");
GetVoxel(sf::Vector3i(1, 1, 1));
GetVoxel(sf::Vector3i(0, 0, 0));
}
OctState Octree::GetVoxel(sf::Vector3i position) {
@@ -323,7 +321,6 @@ bool Octree::Validate(char* data, sf::Vector3i dimensions){
// std::cout << (int)get1DIndexedVoxel(data, dimensions, sf::Vector3i(16, 16, 16)) << std::endl;
// std::cout << (int)GetVoxel(sf::Vector3i(16, 16, 16)) << std::endl;
std::cout << "Validating map..." << std::endl;
for (int x = 0; x < OCT_DIM; x++) {
for (int y = 0; y < OCT_DIM; y++) {
@@ -343,7 +340,5 @@ bool Octree::Validate(char* data, sf::Vector3i dimensions){
}
}
std::cout << "Done" << std::endl;
return true;
}