Blender  V3.3
subdiv_inline.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2018 Blender Foundation. All rights reserved. */
3 
8 #pragma once
9 
10 #include "BLI_assert.h"
11 #include "BLI_compiler_compat.h"
12 
13 #include "BKE_subdiv.h"
14 
16  const float ptex_v,
17  float *r_grid_u,
18  float *r_grid_v)
19 {
20  *r_grid_u = 1.0f - ptex_v;
21  *r_grid_v = 1.0f - ptex_u;
22 }
23 
25  const float grid_v,
26  float *r_ptex_u,
27  float *r_ptex_v)
28 {
29  *r_ptex_u = 1.0f - grid_v;
30  *r_ptex_v = 1.0f - grid_u;
31 }
32 
34 {
35  return (1 << (level - 1)) + 1;
36 }
37 
39  const float quad_v,
40  float *r_corner_u,
41  float *r_corner_v)
42 {
43  int corner;
44  if (quad_u <= 0.5f && quad_v <= 0.5f) {
45  corner = 0;
46  *r_corner_u = 2.0f * quad_u;
47  *r_corner_v = 2.0f * quad_v;
48  }
49  else if (quad_u > 0.5f && quad_v <= 0.5f) {
50  corner = 1;
51  *r_corner_u = 2.0f * quad_v;
52  *r_corner_v = 2.0f * (1.0f - quad_u);
53  }
54  else if (quad_u > 0.5f && quad_v > 0.5f) {
55  corner = 2;
56  *r_corner_u = 2.0f * (1.0f - quad_u);
57  *r_corner_v = 2.0f * (1.0f - quad_v);
58  }
59  else {
60  BLI_assert(quad_u <= 0.5f && quad_v >= 0.5f);
61  corner = 3;
62  *r_corner_u = 2.0f * (1.0f - quad_v);
63  *r_corner_v = 2.0f * quad_u;
64  }
65  return corner;
66 }
67 
69  const int corner, const float grid_u, const float grid_v, float *r_quad_u, float *r_quad_v)
70 {
71  if (corner == 0) {
72  *r_quad_u = 0.5f - grid_v * 0.5f;
73  *r_quad_v = 0.5f - grid_u * 0.5f;
74  }
75  else if (corner == 1) {
76  *r_quad_u = 0.5f + grid_u * 0.5f;
77  *r_quad_v = 0.5f - grid_v * 0.5f;
78  }
79  else if (corner == 2) {
80  *r_quad_u = 0.5f + grid_v * 0.5f;
81  *r_quad_v = 0.5f + grid_u * 0.5f;
82  }
83  else {
84  BLI_assert(corner == 3);
85  *r_quad_u = 0.5f - grid_u * 0.5f;
86  *r_quad_v = 0.5f + grid_v * 0.5f;
87  }
88 }
89 
91 {
92  return edge_crease * edge_crease * 10.0f;
93 }
94 
96 {
97  const float edge_crease_f = edge_crease / 255.0f;
98  return BKE_subdiv_crease_to_sharpness_f(edge_crease_f);
99 }
#define BLI_assert(a)
Definition: BLI_assert.h:46
#define BLI_INLINE
BLI_INLINE void BKE_subdiv_rotate_grid_to_quad(const int corner, const float grid_u, const float grid_v, float *r_quad_u, float *r_quad_v)
Definition: subdiv_inline.h:68
BLI_INLINE float BKE_subdiv_crease_to_sharpness_f(float edge_crease)
Definition: subdiv_inline.h:90
BLI_INLINE int BKE_subdiv_grid_size_from_level(const int level)
Definition: subdiv_inline.h:33
BLI_INLINE int BKE_subdiv_rotate_quad_to_corner(const float quad_u, const float quad_v, float *r_corner_u, float *r_corner_v)
Definition: subdiv_inline.h:38
BLI_INLINE void BKE_subdiv_grid_uv_to_ptex_face_uv(const float grid_u, const float grid_v, float *r_ptex_u, float *r_ptex_v)
Definition: subdiv_inline.h:24
BLI_INLINE void BKE_subdiv_ptex_face_uv_to_grid_uv(const float ptex_u, const float ptex_v, float *r_grid_u, float *r_grid_v)
Definition: subdiv_inline.h:15
BLI_INLINE float BKE_subdiv_crease_to_sharpness_char(char edge_crease)
Definition: subdiv_inline.h:95