Blender  V3.3
voxel.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2001-2002 NaN Holding BV. All rights reserved. */
3 
8 #include "BLI_utildefines.h"
9 #include "BLI_voxel.h"
10 
11 #include "BLI_strict_flags.h"
12 
13 BLI_INLINE float D(const float *data, const int res[3], int x, int y, int z)
14 {
15  CLAMP(x, 0, res[0] - 1);
16  CLAMP(y, 0, res[1] - 1);
17  CLAMP(z, 0, res[2] - 1);
18  return data[BLI_VOXEL_INDEX(x, y, z, res)];
19 }
20 
21 /* *** nearest neighbor *** */
22 
23 float BLI_voxel_sample_nearest(const float *data, const int res[3], const float co[3])
24 {
25  int xi, yi, zi;
26 
27  xi = (int)(co[0] * (float)res[0]);
28  yi = (int)(co[1] * (float)res[1]);
29  zi = (int)(co[2] * (float)res[2]);
30 
31  return D(data, res, xi, yi, zi);
32 }
33 
34 /* returns highest integer <= x as integer (slightly faster than floor()) */
35 BLI_INLINE int FLOORI(float x)
36 {
37  const int r = (int)x;
38  return ((x >= 0.0f) || (float)r == x) ? r : (r - 1);
39 }
40 
49 BLI_INLINE int64_t _clamp(int a, int b, int c)
50 {
51  return (a < b) ? b : ((a > c) ? c : a);
52 }
53 
54 float BLI_voxel_sample_trilinear(const float *data, const int res[3], const float co[3])
55 {
56  if (data) {
57 
58  const float xf = co[0] * (float)res[0] - 0.5f;
59  const float yf = co[1] * (float)res[1] - 0.5f;
60  const float zf = co[2] * (float)res[2] - 0.5f;
61 
62  const int x = FLOORI(xf), y = FLOORI(yf), z = FLOORI(zf);
63 
64  const int64_t xc[2] = {
65  _clamp(x, 0, res[0] - 1),
66  _clamp(x + 1, 0, res[0] - 1),
67  };
68  const int64_t yc[2] = {
69  _clamp(y, 0, res[1] - 1) * res[0],
70  _clamp(y + 1, 0, res[1] - 1) * res[0],
71  };
72  const int64_t zc[2] = {
73  _clamp(z, 0, res[2] - 1) * res[0] * res[1],
74  _clamp(z + 1, 0, res[2] - 1) * res[0] * res[1],
75  };
76 
77  const float dx = xf - (float)x;
78  const float dy = yf - (float)y;
79  const float dz = zf - (float)z;
80 
81  const float u[2] = {1.0f - dx, dx};
82  const float v[2] = {1.0f - dy, dy};
83  const float w[2] = {1.0f - dz, dz};
84 
85  return w[0] *
86  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[0]] + u[1] * data[xc[1] + yc[0] + zc[0]]) +
87  v[1] * (u[0] * data[xc[0] + yc[1] + zc[0]] + u[1] * data[xc[1] + yc[1] + zc[0]])) +
88  w[1] *
89  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[1]] + u[1] * data[xc[1] + yc[0] + zc[1]]) +
90  v[1] * (u[0] * data[xc[0] + yc[1] + zc[1]] + u[1] * data[xc[1] + yc[1] + zc[1]]));
91  }
92  return 0.0f;
93 }
94 
95 float BLI_voxel_sample_triquadratic(const float *data, const int res[3], const float co[3])
96 {
97  if (data) {
98 
99  const float xf = co[0] * (float)res[0];
100  const float yf = co[1] * (float)res[1];
101  const float zf = co[2] * (float)res[2];
102  const int x = FLOORI(xf), y = FLOORI(yf), z = FLOORI(zf);
103 
104  const int64_t xc[3] = {
105  _clamp(x - 1, 0, res[0] - 1),
106  _clamp(x, 0, res[0] - 1),
107  _clamp(x + 1, 0, res[0] - 1),
108  };
109  const int64_t yc[3] = {
110  _clamp(y - 1, 0, res[1] - 1) * res[0],
111  _clamp(y, 0, res[1] - 1) * res[0],
112  _clamp(y + 1, 0, res[1] - 1) * res[0],
113  };
114  const int64_t zc[3] = {
115  _clamp(z - 1, 0, res[2] - 1) * res[0] * res[1],
116  _clamp(z, 0, res[2] - 1) * res[0] * res[1],
117  _clamp(z + 1, 0, res[2] - 1) * res[0] * res[1],
118  };
119 
120  const float dx = xf - (float)x, dy = yf - (float)y, dz = zf - (float)z;
121  const float u[3] = {dx * (0.5f * dx - 1.0f) + 0.5f, dx * (1.0f - dx) + 0.5f, 0.5f * dx * dx};
122  const float v[3] = {dy * (0.5f * dy - 1.0f) + 0.5f, dy * (1.0f - dy) + 0.5f, 0.5f * dy * dy};
123  const float w[3] = {dz * (0.5f * dz - 1.0f) + 0.5f, dz * (1.0f - dz) + 0.5f, 0.5f * dz * dz};
124 
125  return w[0] *
126  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[0]] + u[1] * data[xc[1] + yc[0] + zc[0]] +
127  u[2] * data[xc[2] + yc[0] + zc[0]]) +
128  v[1] * (u[0] * data[xc[0] + yc[1] + zc[0]] + u[1] * data[xc[1] + yc[1] + zc[0]] +
129  u[2] * data[xc[2] + yc[1] + zc[0]]) +
130  v[2] * (u[0] * data[xc[0] + yc[2] + zc[0]] + u[1] * data[xc[1] + yc[2] + zc[0]] +
131  u[2] * data[xc[2] + yc[2] + zc[0]])) +
132  w[1] *
133  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[1]] + u[1] * data[xc[1] + yc[0] + zc[1]] +
134  u[2] * data[xc[2] + yc[0] + zc[1]]) +
135  v[1] * (u[0] * data[xc[0] + yc[1] + zc[1]] + u[1] * data[xc[1] + yc[1] + zc[1]] +
136  u[2] * data[xc[2] + yc[1] + zc[1]]) +
137  v[2] * (u[0] * data[xc[0] + yc[2] + zc[1]] + u[1] * data[xc[1] + yc[2] + zc[1]] +
138  u[2] * data[xc[2] + yc[2] + zc[1]])) +
139  w[2] *
140  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[2]] + u[1] * data[xc[1] + yc[0] + zc[2]] +
141  u[2] * data[xc[2] + yc[0] + zc[2]]) +
142  v[1] * (u[0] * data[xc[0] + yc[1] + zc[2]] + u[1] * data[xc[1] + yc[1] + zc[2]] +
143  u[2] * data[xc[2] + yc[1] + zc[2]]) +
144  v[2] * (u[0] * data[xc[0] + yc[2] + zc[2]] + u[1] * data[xc[1] + yc[2] + zc[2]] +
145  u[2] * data[xc[2] + yc[2] + zc[2]]));
146  }
147  return 0.0f;
148 }
149 
150 float BLI_voxel_sample_tricubic(const float *data,
151  const int res[3],
152  const float co[3],
153  int bspline)
154 {
155  if (data) {
156 
157  const float xf = co[0] * (float)res[0] - 0.5f;
158  const float yf = co[1] * (float)res[1] - 0.5f;
159  const float zf = co[2] * (float)res[2] - 0.5f;
160  const int x = FLOORI(xf), y = FLOORI(yf), z = FLOORI(zf);
161 
162  const int64_t xc[4] = {
163  _clamp(x - 1, 0, res[0] - 1),
164  _clamp(x, 0, res[0] - 1),
165  _clamp(x + 1, 0, res[0] - 1),
166  _clamp(x + 2, 0, res[0] - 1),
167  };
168  const int64_t yc[4] = {
169  _clamp(y - 1, 0, res[1] - 1) * res[0],
170  _clamp(y, 0, res[1] - 1) * res[0],
171  _clamp(y + 1, 0, res[1] - 1) * res[0],
172  _clamp(y + 2, 0, res[1] - 1) * res[0],
173  };
174  const int64_t zc[4] = {
175  _clamp(z - 1, 0, res[2] - 1) * res[0] * res[1],
176  _clamp(z, 0, res[2] - 1) * res[0] * res[1],
177  _clamp(z + 1, 0, res[2] - 1) * res[0] * res[1],
178  _clamp(z + 2, 0, res[2] - 1) * res[0] * res[1],
179  };
180  const float dx = xf - (float)x, dy = yf - (float)y, dz = zf - (float)z;
181 
182  float u[4], v[4], w[4];
183  if (bspline) { // B-Spline
184  u[0] = (((-1.0f / 6.0f) * dx + 0.5f) * dx - 0.5f) * dx + (1.0f / 6.0f);
185  u[1] = ((0.5f * dx - 1.0f) * dx) * dx + (2.0f / 3.0f);
186  u[2] = ((-0.5f * dx + 0.5f) * dx + 0.5f) * dx + (1.0f / 6.0f);
187  u[3] = (1.0f / 6.0f) * dx * dx * dx;
188  v[0] = (((-1.0f / 6.0f) * dy + 0.5f) * dy - 0.5f) * dy + (1.0f / 6.0f);
189  v[1] = ((0.5f * dy - 1.0f) * dy) * dy + (2.0f / 3.0f);
190  v[2] = ((-0.5f * dy + 0.5f) * dy + 0.5f) * dy + (1.0f / 6.0f);
191  v[3] = (1.0f / 6.0f) * dy * dy * dy;
192  w[0] = (((-1.0f / 6.0f) * dz + 0.5f) * dz - 0.5f) * dz + (1.0f / 6.0f);
193  w[1] = ((0.5f * dz - 1.0f) * dz) * dz + (2.0f / 3.0f);
194  w[2] = ((-0.5f * dz + 0.5f) * dz + 0.5f) * dz + (1.0f / 6.0f);
195  w[3] = (1.0f / 6.0f) * dz * dz * dz;
196  }
197  else { // Catmull-Rom
198  u[0] = ((-0.5f * dx + 1.0f) * dx - 0.5f) * dx;
199  u[1] = ((1.5f * dx - 2.5f) * dx) * dx + 1.0f;
200  u[2] = ((-1.5f * dx + 2.0f) * dx + 0.5f) * dx;
201  u[3] = ((0.5f * dx - 0.5f) * dx) * dx;
202  v[0] = ((-0.5f * dy + 1.0f) * dy - 0.5f) * dy;
203  v[1] = ((1.5f * dy - 2.5f) * dy) * dy + 1.0f;
204  v[2] = ((-1.5f * dy + 2.0f) * dy + 0.5f) * dy;
205  v[3] = ((0.5f * dy - 0.5f) * dy) * dy;
206  w[0] = ((-0.5f * dz + 1.0f) * dz - 0.5f) * dz;
207  w[1] = ((1.5f * dz - 2.5f) * dz) * dz + 1.0f;
208  w[2] = ((-1.5f * dz + 2.0f) * dz + 0.5f) * dz;
209  w[3] = ((0.5f * dz - 0.5f) * dz) * dz;
210  }
211 
212  return w[0] *
213  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[0]] + u[1] * data[xc[1] + yc[0] + zc[0]] +
214  u[2] * data[xc[2] + yc[0] + zc[0]] + u[3] * data[xc[3] + yc[0] + zc[0]]) +
215  v[1] * (u[0] * data[xc[0] + yc[1] + zc[0]] + u[1] * data[xc[1] + yc[1] + zc[0]] +
216  u[2] * data[xc[2] + yc[1] + zc[0]] + u[3] * data[xc[3] + yc[1] + zc[0]]) +
217  v[2] * (u[0] * data[xc[0] + yc[2] + zc[0]] + u[1] * data[xc[1] + yc[2] + zc[0]] +
218  u[2] * data[xc[2] + yc[2] + zc[0]] + u[3] * data[xc[3] + yc[2] + zc[0]]) +
219  v[3] * (u[0] * data[xc[0] + yc[3] + zc[0]] + u[1] * data[xc[1] + yc[3] + zc[0]] +
220  u[2] * data[xc[2] + yc[3] + zc[0]] + u[3] * data[xc[3] + yc[3] + zc[0]])) +
221  w[1] *
222  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[1]] + u[1] * data[xc[1] + yc[0] + zc[1]] +
223  u[2] * data[xc[2] + yc[0] + zc[1]] + u[3] * data[xc[3] + yc[0] + zc[1]]) +
224  v[1] * (u[0] * data[xc[0] + yc[1] + zc[1]] + u[1] * data[xc[1] + yc[1] + zc[1]] +
225  u[2] * data[xc[2] + yc[1] + zc[1]] + u[3] * data[xc[3] + yc[1] + zc[1]]) +
226  v[2] * (u[0] * data[xc[0] + yc[2] + zc[1]] + u[1] * data[xc[1] + yc[2] + zc[1]] +
227  u[2] * data[xc[2] + yc[2] + zc[1]] + u[3] * data[xc[3] + yc[2] + zc[1]]) +
228  v[3] * (u[0] * data[xc[0] + yc[3] + zc[1]] + u[1] * data[xc[1] + yc[3] + zc[1]] +
229  u[2] * data[xc[2] + yc[3] + zc[1]] + u[3] * data[xc[3] + yc[3] + zc[1]])) +
230  w[2] *
231  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[2]] + u[1] * data[xc[1] + yc[0] + zc[2]] +
232  u[2] * data[xc[2] + yc[0] + zc[2]] + u[3] * data[xc[3] + yc[0] + zc[2]]) +
233  v[1] * (u[0] * data[xc[0] + yc[1] + zc[2]] + u[1] * data[xc[1] + yc[1] + zc[2]] +
234  u[2] * data[xc[2] + yc[1] + zc[2]] + u[3] * data[xc[3] + yc[1] + zc[2]]) +
235  v[2] * (u[0] * data[xc[0] + yc[2] + zc[2]] + u[1] * data[xc[1] + yc[2] + zc[2]] +
236  u[2] * data[xc[2] + yc[2] + zc[2]] + u[3] * data[xc[3] + yc[2] + zc[2]]) +
237  v[3] * (u[0] * data[xc[0] + yc[3] + zc[2]] + u[1] * data[xc[1] + yc[3] + zc[2]] +
238  u[2] * data[xc[2] + yc[3] + zc[2]] + u[3] * data[xc[3] + yc[3] + zc[2]])) +
239  w[3] *
240  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[3]] + u[1] * data[xc[1] + yc[0] + zc[3]] +
241  u[2] * data[xc[2] + yc[0] + zc[3]] + u[3] * data[xc[3] + yc[0] + zc[3]]) +
242  v[1] * (u[0] * data[xc[0] + yc[1] + zc[3]] + u[1] * data[xc[1] + yc[1] + zc[3]] +
243  u[2] * data[xc[2] + yc[1] + zc[3]] + u[3] * data[xc[3] + yc[1] + zc[3]]) +
244  v[2] * (u[0] * data[xc[0] + yc[2] + zc[3]] + u[1] * data[xc[1] + yc[2] + zc[3]] +
245  u[2] * data[xc[2] + yc[2] + zc[3]] + u[3] * data[xc[3] + yc[2] + zc[3]]) +
246  v[3] * (u[0] * data[xc[0] + yc[3] + zc[3]] + u[1] * data[xc[1] + yc[3] + zc[3]] +
247  u[2] * data[xc[2] + yc[3] + zc[3]] + u[3] * data[xc[3] + yc[3] + zc[3]]));
248  }
249  return 0.0f;
250 }
typedef float(TangentPoint)[2]
#define BLI_INLINE
Strict compiler flags for areas of code we want to ensure don't do conversions without us knowing abo...
#define BLI_VOXEL_INDEX(x, y, z, res)
Definition: BLI_voxel.h:15
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble z
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position CLAMP
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition: btQuadWord.h:119
static unsigned c
Definition: RandGen.cpp:83
static unsigned a[3]
Definition: RandGen.cpp:78
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
__int64 int64_t
Definition: stdint.h:89
float BLI_voxel_sample_nearest(const float *data, const int res[3], const float co[3])
Definition: voxel.c:23
BLI_INLINE int FLOORI(float x)
Definition: voxel.c:35
BLI_INLINE int64_t _clamp(int a, int b, int c)
Definition: voxel.c:49
BLI_INLINE float D(const float *data, const int res[3], int x, int y, int z)
Definition: voxel.c:13
float BLI_voxel_sample_trilinear(const float *data, const int res[3], const float co[3])
Definition: voxel.c:54
float BLI_voxel_sample_triquadratic(const float *data, const int res[3], const float co[3])
Definition: voxel.c:95
float BLI_voxel_sample_tricubic(const float *data, const int res[3], const float co[3], int bspline)
Definition: voxel.c:150