From 76a1e5b39825e2aa26d7d6625879dab63b3dadb6 Mon Sep 17 00:00:00 2001 From: ladevieq Date: Thu, 1 Sep 2022 00:04:48 +0200 Subject: Fix bvh generation --- src/scene.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'src/scene.cpp') diff --git a/src/scene.cpp b/src/scene.cpp index 2f4aa97..9b9f82e 100644 --- a/src/scene.cpp +++ b/src/scene.cpp @@ -87,12 +87,14 @@ scene::scene(const camera& cam, uint32_t width, uint32_t height) if (node.mesh != nullptr) { const auto* mesh = node.mesh; const auto& mesh_positions = mesh->get_attribute(ATTRIBUTE_TYPE::POSITION); + const auto& mesh_normals = mesh->get_attribute(ATTRIBUTE_TYPE::NORMAL); + const auto& mesh_uvs_0 = mesh->get_attribute(ATTRIBUTE_TYPE::UV_0); const auto& mesh_indices = mesh->get_indices(); indices.resize(indices.size() + mesh_indices.size()); positions.resize(vertices_offset + mesh_positions.size()); - normals.resize(vertices_offset + (size_t)mesh->vertices_count() * Mesh::attribute_components(ATTRIBUTE_TYPE::NORMAL)); - uvs.resize(vertices_offset + (size_t)mesh->vertices_count() * Mesh::attribute_components(ATTRIBUTE_TYPE::UV_0)); + normals.resize(vertices_offset + mesh_normals.size()); + uvs.resize(vertices_offset + mesh_uvs_0.size()); std::memcpy( positions.data() + vertices_offset * Mesh::attribute_components(ATTRIBUTE_TYPE::POSITION), @@ -102,14 +104,14 @@ scene::scene(const camera& cam, uint32_t width, uint32_t height) std::memcpy( normals.data() + vertices_offset * Mesh::attribute_components(ATTRIBUTE_TYPE::NORMAL), - mesh->get_attribute(ATTRIBUTE_TYPE::NORMAL).data(), - (size_t)mesh->vertices_count() * Mesh::attribute_components(ATTRIBUTE_TYPE::NORMAL) * sizeof(float) + mesh_normals.data(), + mesh_normals.size() * sizeof(float) ); std::memcpy( uvs.data() + vertices_offset * Mesh::attribute_components(ATTRIBUTE_TYPE::UV_0), - mesh->get_attribute(ATTRIBUTE_TYPE::UV_0).data(), - (size_t)mesh->vertices_count() * Mesh::attribute_components(ATTRIBUTE_TYPE::UV_0) * sizeof(float) + mesh_uvs_0.data(), + mesh_uvs_0.size() * sizeof(float) ); // Add offset to indices in order to have absolute indices @@ -118,9 +120,9 @@ scene::scene(const camera& cam, uint32_t width, uint32_t height) for (size_t element_index { 0U }; element_index < submesh.element_count; element_index++) { auto global_index = submesh.index_offset + element_index * 3; - size_t i1 = mesh_indices[global_index]; - size_t i2 = mesh_indices[global_index + 1]; - size_t i3 = mesh_indices[global_index + 2]; + size_t i1 = submesh.vertex_offset + mesh_indices[global_index]; + size_t i2 = submesh.vertex_offset + mesh_indices[global_index + 1]; + size_t i3 = submesh.vertex_offset + mesh_indices[global_index + 2]; triangles.emplace_back( vec3 { mesh_positions[i1 * 3], mesh_positions[i1 * 3 + 1], mesh_positions[i1 * 3 + 2] }, @@ -174,6 +176,6 @@ scene::scene(const camera& cam, uint32_t width, uint32_t height) bvh_buffer = vkrenderer::create_buffer(packed_nodes.size() * sizeof(packed_nodes[0])); bvh_buffer->write(packed_nodes.data(), 0, packed_nodes.size() * sizeof(packed_nodes[0])); - materials_buffer = vkrenderer::create_buffer(materials.size() * sizeof(materials[0])); - materials_buffer->write(materials.data(), 0, materials.size() * sizeof(materials[0])); + // materials_buffer = vkrenderer::create_buffer(materials.size() * sizeof(materials[0])); + // materials_buffer->write(materials.data(), 0, materials.size() * sizeof(materials[0])); } -- cgit v1.3