Blender V4.5
subdiv_inline.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2018 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include "BLI_assert.h"
12#include "BLI_compiler_compat.h"
13
14#include "BKE_subdiv.hh"
15
16#include <cmath>
17
18namespace blender::bke::subdiv {
19
20BLI_INLINE void ptex_face_uv_to_grid_uv(const float ptex_u,
21 const float ptex_v,
22 float *r_grid_u,
23 float *r_grid_v)
24{
25 *r_grid_u = 1.0f - ptex_v;
26 *r_grid_v = 1.0f - ptex_u;
27}
28
29BLI_INLINE void grid_uv_to_ptex_face_uv(const float grid_u,
30 const float grid_v,
31 float *r_ptex_u,
32 float *r_ptex_v)
33{
34 *r_ptex_u = 1.0f - grid_v;
35 *r_ptex_v = 1.0f - grid_u;
36}
37
38BLI_INLINE int grid_size_from_level(const int level)
39{
40 return (1 << (level - 1)) + 1;
41}
42
43BLI_INLINE int rotate_quad_to_corner(const float quad_u,
44 const float quad_v,
45 float *r_corner_u,
46 float *r_corner_v)
47{
48 int corner;
49 if (quad_u <= 0.5f && quad_v <= 0.5f) {
50 corner = 0;
51 *r_corner_u = 2.0f * quad_u;
52 *r_corner_v = 2.0f * quad_v;
53 }
54 else if (quad_u > 0.5f && quad_v <= 0.5f) {
55 corner = 1;
56 *r_corner_u = 2.0f * quad_v;
57 *r_corner_v = 2.0f * (1.0f - quad_u);
58 }
59 else if (quad_u > 0.5f && quad_v > 0.5f) {
60 corner = 2;
61 *r_corner_u = 2.0f * (1.0f - quad_u);
62 *r_corner_v = 2.0f * (1.0f - quad_v);
63 }
64 else {
65 BLI_assert(quad_u <= 0.5f && quad_v >= 0.5f);
66 corner = 3;
67 *r_corner_u = 2.0f * (1.0f - quad_v);
68 *r_corner_v = 2.0f * quad_u;
69 }
70 return corner;
71}
72
74 const int corner, const float grid_u, const float grid_v, float *r_quad_u, float *r_quad_v)
75{
76 if (corner == 0) {
77 *r_quad_u = 0.5f - grid_v * 0.5f;
78 *r_quad_v = 0.5f - grid_u * 0.5f;
79 }
80 else if (corner == 1) {
81 *r_quad_u = 0.5f + grid_u * 0.5f;
82 *r_quad_v = 0.5f - grid_v * 0.5f;
83 }
84 else if (corner == 2) {
85 *r_quad_u = 0.5f + grid_v * 0.5f;
86 *r_quad_v = 0.5f + grid_u * 0.5f;
87 }
88 else {
89 BLI_assert(corner == 3);
90 *r_quad_u = 0.5f - grid_u * 0.5f;
91 *r_quad_v = 0.5f + grid_v * 0.5f;
92 }
93}
94
96{
97 return crease * crease * 10.0f;
98}
99
100BLI_INLINE float sharpness_to_crease(float sharpness)
101{
102 return sqrt(sharpness * 0.1f);
103}
104
105} // namespace blender::bke::subdiv
#define BLI_assert(a)
Definition BLI_assert.h:46
#define BLI_INLINE
#define sqrt
BLI_INLINE float crease_to_sharpness(float crease)
BLI_INLINE void rotate_grid_to_quad(int corner, float grid_u, float grid_v, float *r_quad_u, float *r_quad_v)
BLI_INLINE void grid_uv_to_ptex_face_uv(float grid_u, float grid_v, float *r_ptex_u, float *r_ptex_v)
BLI_INLINE float sharpness_to_crease(float sharpness)
BLI_INLINE void ptex_face_uv_to_grid_uv(float ptex_u, float ptex_v, float *r_grid_u, float *r_grid_v)
BLI_INLINE int grid_size_from_level(int level)
BLI_INLINE int rotate_quad_to_corner(float quad_u, float quad_v, float *r_corner_u, float *r_corner_v)