Merge branch 'master' into blender2.8
[blender.git] / source / blender / blenkernel / intern / multires_inline.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2018 by Blender Foundation.
19  * All rights reserved.
20  *
21  * Contributor(s): Sergey Sharybin.
22  *
23  * ***** END GPL LICENSE BLOCK *****
24  */
25
26 /** \file blender/blenkernel/intern/multires_inline.h
27  *  \ingroup bke
28  */
29
30 #ifndef __MULTIRES_INLINE_H__
31 #define __MULTIRES_INLINE_H__
32
33 #include "BKE_multires.h"
34 #include "BLI_math_vector.h"
35
36 BLI_INLINE void BKE_multires_construct_tangent_matrix(
37         float tangent_matrix[3][3],
38         const float dPdu[3],
39         const float dPdv[3],
40         const int corner)
41 {
42         if (corner == 0) {
43                 copy_v3_v3(tangent_matrix[0], dPdv);
44                 copy_v3_v3(tangent_matrix[1], dPdu);
45                 mul_v3_fl(tangent_matrix[0], -1.0f);
46                 mul_v3_fl(tangent_matrix[1], -1.0f);
47         }
48         else if (corner == 1) {
49                 copy_v3_v3(tangent_matrix[0], dPdu);
50                 copy_v3_v3(tangent_matrix[1], dPdv);
51                 mul_v3_fl(tangent_matrix[1], -1.0f);
52         }
53         else if (corner == 2) {
54                 copy_v3_v3(tangent_matrix[0], dPdv);
55                 copy_v3_v3(tangent_matrix[1], dPdu);
56         }
57         else if (corner == 3) {
58                 copy_v3_v3(tangent_matrix[0], dPdu);
59                 copy_v3_v3(tangent_matrix[1], dPdv);
60                 mul_v3_fl(tangent_matrix[0], -1.0f);
61         }
62         cross_v3_v3v3(tangent_matrix[2], dPdu, dPdv);
63         normalize_v3(tangent_matrix[0]);
64         normalize_v3(tangent_matrix[1]);
65         normalize_v3(tangent_matrix[2]);
66 }
67
68 #endif  /* __MULTIRES_INLINE_H__ */