Porting over the traversal algo to do some in situ programming. Running into some pretty bad register pressure bottlenecks. Might pivot to thinking about the multistage kernel for a bit
This commit is contained in:
@@ -30,17 +30,15 @@ bool Application::init_clcaster() {
|
||||
sf::Image bitmap = map->GenerateHeightBitmap(sf::Vector3i(MAP_X, MAP_Y, MAP_Z));
|
||||
map->ApplyHeightmap(bitmap);
|
||||
|
||||
//map->octree.CastRayOctree(sf::Vector2f(1.5f, -2.0f), sf::Vector3f(5.1f, 5.1f, 5.1f));
|
||||
map->octree.CastRayOctree(sf::Vector2f(1.57f, 0.0001f), sf::Vector3f(0.5f, 0.5f, 0.5f));
|
||||
|
||||
raycaster->assign_octree(map);
|
||||
raycaster->assign_map(map);
|
||||
|
||||
|
||||
|
||||
// Create a new camera with (starting position, direction)
|
||||
camera = std::make_shared<Camera>(
|
||||
sf::Vector3f(50, 60, 10),
|
||||
sf::Vector2f(1.5f, -2.0f),
|
||||
sf::Vector3f(0.5f, 0.5f, 0.5f),
|
||||
sf::Vector2f(1.45f, 0.3f),
|
||||
window.get()
|
||||
);
|
||||
|
||||
|
||||
@@ -165,6 +165,8 @@ void Input::render_gui() {
|
||||
ImGui::Columns(6);
|
||||
|
||||
for (auto i : held_keys) {
|
||||
if (i < 0)
|
||||
continue;
|
||||
ImGui::Text(key_strings.at(i).c_str());
|
||||
ImGui::NextColumn();
|
||||
}
|
||||
|
||||
@@ -12,6 +12,8 @@ ArrayMap::ArrayMap(sf::Vector3i dimensions) {
|
||||
//voxel_data[i] = 1;
|
||||
}
|
||||
|
||||
setVoxel(sf::Vector3i(1, 1, 5), 1);
|
||||
|
||||
for (int x = 0; x < dimensions.x; x++) {
|
||||
for (int y = 0; y < dimensions.y; y++) {
|
||||
setVoxel(sf::Vector3i(x, y, 0), 1);
|
||||
|
||||
@@ -322,7 +322,6 @@ std::tuple<uint64_t, uint64_t> Octree::GenerationRecursion(char* data, sf::Vecto
|
||||
}
|
||||
|
||||
char Octree::get1DIndexedVoxel(char* data, sf::Vector3i dimensions, sf::Vector3i position) {
|
||||
std::cout << std::to_string((int)data[position.x + oct_dimensions * (position.y + oct_dimensions * position.z)]) << std::endl;
|
||||
return data[position.x + oct_dimensions * (position.y + oct_dimensions * position.z)];
|
||||
}
|
||||
|
||||
@@ -372,6 +371,13 @@ std::vector<std::tuple<sf::Vector3i, char>> Octree::CastRayOctree(
|
||||
|
||||
sf::Vector3f ray_dir(1, 0, 0);
|
||||
|
||||
// correct for the base ray pointing to (1, 0, 0) as (0, 0). Should equal (1.57, 0)
|
||||
ray_dir = sf::Vector3f(
|
||||
static_cast<float>(ray_dir.z * sin(-1.57) + ray_dir.x * cos(-1.57)),
|
||||
static_cast<float>(ray_dir.y),
|
||||
static_cast<float>(ray_dir.z * cos(-1.57) - ray_dir.x * sin(-1.57))
|
||||
);
|
||||
|
||||
// Pitch
|
||||
ray_dir = sf::Vector3f(
|
||||
ray_dir.z * sin(cam_dir.x) + ray_dir.x * cos(cam_dir.x),
|
||||
@@ -386,13 +392,6 @@ std::vector<std::tuple<sf::Vector3i, char>> Octree::CastRayOctree(
|
||||
ray_dir.z
|
||||
);
|
||||
|
||||
// correct for the base ray pointing to (1, 0, 0) as (0, 0). Should equal (1.57, 0)
|
||||
ray_dir = sf::Vector3f(
|
||||
static_cast<float>(ray_dir.z * sin(-1.57) + ray_dir.x * cos(-1.57)),
|
||||
static_cast<float>(ray_dir.y),
|
||||
static_cast<float>(ray_dir.z * cos(-1.57) - ray_dir.x * sin(-1.57))
|
||||
);
|
||||
|
||||
|
||||
// Setup the voxel step based on what direction the ray is pointing
|
||||
sf::Vector3i voxel_step(1, 1, 1);
|
||||
@@ -438,7 +437,7 @@ std::vector<std::tuple<sf::Vector3i, char>> Octree::CastRayOctree(
|
||||
int dist = 0;
|
||||
sf::Vector3i face_mask(0, 0, 0);
|
||||
int voxel_data = 0;
|
||||
|
||||
return travel_path;
|
||||
// Andrew Woo's raycasting algo
|
||||
do {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user