Files
test/source/blender/blenkernel/intern/multires_inline.hh
Sean Kim 73fd422701 Cleanup: Use C++ math types for multires_inline.hh
* Use `float3x3` and `float3` for the resulting tangent matrix and
  constituent derivatives, respectively.

Pull Request: https://projects.blender.org/blender/blender/pulls/140442
2025-06-16 23:42:05 +02:00

46 lines
1.4 KiB
C++

/* 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());
}