~ | Working toplevel with transformed obj

This commit is contained in:
TheRedShip
2025-01-23 15:38:39 +01:00
parent 1783037bdf
commit 1f23592883
3 changed files with 32 additions and 13 deletions

View File

@ -20,8 +20,8 @@ int main(int argc, char **argv)
return (1);
Window window(&scene, WIDTH, HEIGHT, "RT_GPU", 0);
Shader shader("shaders/vertex.vert", "shaders/frag.frag", "shaders/compute.glsl");
// Shader shader("shaders/vertex.vert", "shaders/frag.frag", "shaders/debug.glsl");
// Shader shader("shaders/vertex.vert", "shaders/frag.frag", "shaders/compute.glsl");
Shader shader("shaders/vertex.vert", "shaders/frag.frag", "shaders/debug.glsl");
GLint max_gpu_size;
glGetIntegerv(GL_MAX_SHADER_STORAGE_BLOCK_SIZE, &max_gpu_size);

View File

@ -29,16 +29,34 @@ TopBVH::TopBVH(std::vector<GPUBvhData> &bvhs_data, std::vector<GPUBvh> &bvhs, in
void TopBVH::updateBounds(std::vector<GPUBvhData> &bvhs_data, std::vector<GPUBvh> &bvhs)
{
for (int i = 0; i < _bvh_count; i++)
{
GPUBvhData bvh_data = bvhs_data[_first_bvh + i];
GPUBvh root_bvh = bvhs[bvh_data.bvh_start_index];
{
GPUBvhData bvh_data = bvhs_data[_first_bvh + i];
GPUBvh root_bvh = bvhs[bvh_data.bvh_start_index];
glm::vec3 min = root_bvh.min + bvh_data.offset;
glm::vec3 max = root_bvh.max + bvh_data.offset;
_aabb.min = glm::min(_aabb.min, min);
_aabb.max = glm::max(_aabb.max, max);
}
glm::vec3 corners[8] = {
glm::vec3(root_bvh.min.x, root_bvh.min.y, root_bvh.min.z),
glm::vec3(root_bvh.max.x, root_bvh.min.y, root_bvh.min.z),
glm::vec3(root_bvh.min.x, root_bvh.max.y, root_bvh.min.z),
glm::vec3(root_bvh.max.x, root_bvh.max.y, root_bvh.min.z),
glm::vec3(root_bvh.min.x, root_bvh.min.y, root_bvh.max.z),
glm::vec3(root_bvh.max.x, root_bvh.min.y, root_bvh.max.z),
glm::vec3(root_bvh.min.x, root_bvh.max.y, root_bvh.max.z),
glm::vec3(root_bvh.max.x, root_bvh.max.y, root_bvh.max.z)
};
glm::vec3 transformed_min(1e30);
glm::vec3 transformed_max(-1e30);
for (glm::vec3 corner : corners)
{
glm::vec3 transformed = glm::vec3(glm::inverse(bvh_data.transform) * glm::vec4(corner, 1.0)) + bvh_data.offset;
transformed_min = glm::min(transformed_min, transformed);
transformed_max = glm::max(transformed_max, transformed);
}
_aabb.min = glm::min(_aabb.min, transformed_min);
_aabb.max = glm::max(_aabb.max, transformed_max);
}
}
float TopBVH::evaluateSah(std::vector<GPUBvhData> &bvhs_data, std::vector<GPUBvh> &bvhs, int axis, float pos)