2023-08-16 00:20:26 +10:00
|
|
|
/* SPDX-FileCopyrightText: 2018 Blender Authors
|
2023-05-31 16:19:06 +02:00
|
|
|
*
|
|
|
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
2018-11-01 15:12:54 +01:00
|
|
|
|
2019-02-18 08:08:12 +11:00
|
|
|
/** \file
|
|
|
|
|
* \ingroup bke
|
2018-11-01 15:12:54 +01:00
|
|
|
*/
|
|
|
|
|
|
2018-11-02 06:59:51 +11:00
|
|
|
#pragma once
|
2018-11-01 15:12:54 +01:00
|
|
|
|
2023-08-02 22:14:18 +02:00
|
|
|
#include "BKE_multires.hh"
|
2025-06-16 23:42:05 +02:00
|
|
|
#include "BLI_math_matrix_types.hh"
|
|
|
|
|
#include "BLI_math_vector.hh"
|
|
|
|
|
#include "BLI_math_vector_types.hh"
|
2018-11-01 15:12:54 +01:00
|
|
|
|
2025-06-16 23:42:05 +02:00
|
|
|
BLI_INLINE void BKE_multires_construct_tangent_matrix(blender::float3x3 &tangent_matrix,
|
|
|
|
|
const blender::float3 &dPdu,
|
|
|
|
|
const blender::float3 &dPdv,
|
2018-11-01 15:12:54 +01:00
|
|
|
const int corner)
|
|
|
|
|
{
|
|
|
|
|
if (corner == 0) {
|
2025-06-16 23:42:05 +02:00
|
|
|
tangent_matrix.x_axis() = dPdv * -1.0f;
|
|
|
|
|
tangent_matrix.y_axis() = dPdu * -1.0f;
|
2018-11-01 15:12:54 +01:00
|
|
|
}
|
|
|
|
|
else if (corner == 1) {
|
2025-06-16 23:42:05 +02:00
|
|
|
tangent_matrix.x_axis() = dPdu;
|
|
|
|
|
tangent_matrix.y_axis() = dPdv * -1.0f;
|
2018-11-01 15:12:54 +01:00
|
|
|
}
|
|
|
|
|
else if (corner == 2) {
|
2025-06-16 23:42:05 +02:00
|
|
|
tangent_matrix.x_axis() = dPdv;
|
|
|
|
|
tangent_matrix.y_axis() = dPdu;
|
2018-11-01 15:12:54 +01:00
|
|
|
}
|
|
|
|
|
else if (corner == 3) {
|
2025-06-16 23:42:05 +02:00
|
|
|
tangent_matrix.x_axis() = dPdu * -1.0f;
|
|
|
|
|
tangent_matrix.y_axis() = dPdv;
|
2018-11-01 15:12:54 +01:00
|
|
|
}
|
2020-11-24 12:40:42 +01:00
|
|
|
else {
|
2021-07-15 18:23:28 +10:00
|
|
|
BLI_assert_msg(0, "Unhandled corner index");
|
2020-11-24 12:40:42 +01:00
|
|
|
}
|
2025-06-16 23:42:05 +02:00
|
|
|
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());
|
2018-11-01 15:12:54 +01:00
|
|
|
}
|