diff --git a/src/game/systems/painting-system.cpp b/src/game/systems/painting-system.cpp index cc07ac1..de64691 100644 --- a/src/game/systems/painting-system.cpp +++ b/src/game/systems/painting-system.cpp @@ -180,8 +180,7 @@ void painting_system::update(double t, double dt) /// @TODO: smooth normals in middle of segment - float3 tangents[12]; - float3 bitangents[12]; + float4 tangents[12]; for (int i = 0; i < 4; ++i) { const float3& a = tangent_positions[i * 3]; @@ -204,13 +203,12 @@ void painting_system::update(double t, double dt) tangent = math::normalize(tangent_rotation * tangent); bitangent = math::normalize(tangent_rotation * bitangent); - tangents[i * 3] = tangent; - tangents[i * 3 + 1] = tangent; - tangents[i * 3 + 2] = tangent; + // Calculate sign of bitangent + float bitangent_sign = (math::dot(math::cross(surface_normal, tangent), bitangent) < 0.0f) ? -1.0f : 1.0f; - bitangents[i * 3] = bitangent; - bitangents[i * 3 + 1] = bitangent; - bitangents[i * 3 + 2] = bitangent; + tangents[i * 3] = {tangent.x, tangent.y, tangent.z, bitangent_sign}; + tangents[i * 3 + 1] = {tangent.x, tangent.y, tangent.z, bitangent_sign}; + tangents[i * 3 + 2] = {tangent.x, tangent.y, tangent.z, bitangent_sign}; } float vertex_data[13 * 12]; @@ -232,7 +230,7 @@ void painting_system::update(double t, double dt) *(v++) = tangents[i].x; *(v++) = tangents[i].y; *(v++) = tangents[i].z; - *(v++) = 0.0f; + *(v++) = tangents[i].w; } std::size_t segment_size = sizeof(float) * vertex_size * 6; diff --git a/src/resources/model-loader.cpp b/src/resources/model-loader.cpp index 87529ed..d3427a2 100644 --- a/src/resources/model-loader.cpp +++ b/src/resources/model-loader.cpp @@ -356,13 +356,6 @@ model* resource_loader::load(resource_manager* resource_manager, PHYSFS_F } */ -static struct attribute_data -{ - std::string type; - std::size_t size; - std::vector data; -}; - template <> model* resource_loader::load(resource_manager* resource_manager, PHYSFS_File* file) { @@ -519,8 +512,6 @@ model* resource_loader::load(resource_manager* resource_manager, PHYSFS_F if (auto size_node = material_node.value().find("size"); size_node != material_node.value().end()) group_size = size_node.value().get(); - std::cout << "MATERIAL: " << group_name << std::endl; - group_material = resource_manager->load(group_name + ".mtl"); model_group* model_group = model->add_group(group_name);