/* SPDX-FileCopyrightText: 2018 Blender Authors * * SPDX-License-Identifier: GPL-2.0-or-later */ /** \file * \ingroup bke */ #pragma once #include "BKE_multires.hh" #include "BLI_math_matrix_types.hh" #include "BLI_math_vector.hh" #include "BLI_math_vector_types.hh" BLI_INLINE void BKE_multires_construct_tangent_matrix(blender::float3x3 &tangent_matrix, const blender::float3 &dPdu, const blender::float3 &dPdv, const int corner) { if (corner == 0) { tangent_matrix.x_axis() = dPdv * -1.0f; tangent_matrix.y_axis() = dPdu * -1.0f; } else if (corner == 1) { tangent_matrix.x_axis() = dPdu; tangent_matrix.y_axis() = dPdv * -1.0f; } else if (corner == 2) { tangent_matrix.x_axis() = dPdv; tangent_matrix.y_axis() = dPdu; } else if (corner == 3) { tangent_matrix.x_axis() = dPdu * -1.0f; tangent_matrix.y_axis() = dPdv; } else { BLI_assert_msg(0, "Unhandled corner index"); } tangent_matrix.z_axis() = blender::math::cross(dPdu, dPdv); tangent_matrix.x_axis() = blender::math::normalize(tangent_matrix.x_axis()); tangent_matrix.y_axis() = blender::math::normalize(tangent_matrix.y_axis()); tangent_matrix.z_axis() = blender::math::normalize(tangent_matrix.z_axis()); }