+ | Dragon and bvh

This commit is contained in:
TheRedShip
2025-01-18 12:30:35 +01:00
parent bb673d4af1
commit 5d3de6158b
20 changed files with 430842 additions and 25476 deletions

View File

@ -53,7 +53,7 @@ bool Scene::parseScene(char *name)
}
file.close();
BVH *bvh = new BVH(_gpu_objects, 0, _gpu_objects.size());
BVH *bvh = new BVH(_gpu_triangles, 0, _gpu_triangles.size());
_gpu_bvh = bvh->getGPUBvhs();
return (true);
@ -84,13 +84,6 @@ void Scene::addObject(Object *obj)
gpu_obj.vertex1 = quad->getUp();
gpu_obj.vertex2 = quad->getRight();
}
else if (obj->getType() == Object::Type::TRIANGLE)
{
auto triangle = static_cast<Triangle *>(obj);
gpu_obj.vertex1 = triangle->getVertex2();
gpu_obj.vertex2 = triangle->getVertex3();
gpu_obj.normal = triangle->getNormal();
}
else if (obj->getType() == Object::Type::CUBE)
{
auto cube = static_cast<Cube *>(obj);
@ -103,6 +96,22 @@ void Scene::addObject(Object *obj)
gpu_obj.normal = glm::vec3(cylinder->getRadius(), cylinder->getHeight(), 0.0f);
gpu_obj.transform = glm::mat4(cylinder->getRotation());
}
else if (obj->getType() == Object::Type::TRIANGLE)
{
GPUTriangle gpu_triangle;
auto triangle = static_cast<Triangle *>(obj);
gpu_triangle.position = obj->getPosition();
gpu_triangle.mat_index = obj->getMaterialIndex();
gpu_triangle.vertex1 = triangle->getVertex2();
gpu_triangle.vertex2 = triangle->getVertex3();
gpu_triangle.normal = triangle->getNormal();
_gpu_triangles.push_back(gpu_triangle);
return ;
}
else if (obj->getType() == Object::Type::PORTAL)
{
auto portal = static_cast<Portal *>(obj);
@ -169,6 +178,11 @@ const std::vector<GPUObject> &Scene::getObjectData() const
return (_gpu_objects);
}
const std::vector<GPUTriangle> &Scene::getTriangleData() const
{
return (_gpu_triangles);
}
std::vector<GPUMaterial> &Scene::getMaterialData()
{
return (_gpu_materials);