Blender  V2.93
voxel.c
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19 
24 #include "BLI_utildefines.h"
25 #include "BLI_voxel.h"
26 
27 #include "BLI_strict_flags.h"
28 
29 BLI_INLINE float D(const float *data, const int res[3], int x, int y, int z)
30 {
31  CLAMP(x, 0, res[0] - 1);
32  CLAMP(y, 0, res[1] - 1);
33  CLAMP(z, 0, res[2] - 1);
34  return data[BLI_VOXEL_INDEX(x, y, z, res)];
35 }
36 
37 /* *** nearest neighbor *** */
38 /* input coordinates must be in bounding box 0.0 - 1.0 */
39 float BLI_voxel_sample_nearest(const float *data, const int res[3], const float co[3])
40 {
41  int xi, yi, zi;
42 
43  xi = (int)(co[0] * (float)res[0]);
44  yi = (int)(co[1] * (float)res[1]);
45  zi = (int)(co[2] * (float)res[2]);
46 
47  return D(data, res, xi, yi, zi);
48 }
49 
50 /* returns highest integer <= x as integer (slightly faster than floor()) */
51 BLI_INLINE int FLOORI(float x)
52 {
53  const int r = (int)x;
54  return ((x >= 0.0f) || (float)r == x) ? r : (r - 1);
55 }
56 
65 BLI_INLINE int64_t _clamp(int a, int b, int c)
66 {
67  return (a < b) ? b : ((a > c) ? c : a);
68 }
69 
70 float BLI_voxel_sample_trilinear(const float *data, const int res[3], const float co[3])
71 {
72  if (data) {
73 
74  const float xf = co[0] * (float)res[0] - 0.5f;
75  const float yf = co[1] * (float)res[1] - 0.5f;
76  const float zf = co[2] * (float)res[2] - 0.5f;
77 
78  const int x = FLOORI(xf), y = FLOORI(yf), z = FLOORI(zf);
79 
80  const int64_t xc[2] = {
81  _clamp(x, 0, res[0] - 1),
82  _clamp(x + 1, 0, res[0] - 1),
83  };
84  const int64_t yc[2] = {
85  _clamp(y, 0, res[1] - 1) * res[0],
86  _clamp(y + 1, 0, res[1] - 1) * res[0],
87  };
88  const int64_t zc[2] = {
89  _clamp(z, 0, res[2] - 1) * res[0] * res[1],
90  _clamp(z + 1, 0, res[2] - 1) * res[0] * res[1],
91  };
92 
93  const float dx = xf - (float)x;
94  const float dy = yf - (float)y;
95  const float dz = zf - (float)z;
96 
97  const float u[2] = {1.0f - dx, dx};
98  const float v[2] = {1.0f - dy, dy};
99  const float w[2] = {1.0f - dz, dz};
100 
101  return w[0] *
102  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[0]] + u[1] * data[xc[1] + yc[0] + zc[0]]) +
103  v[1] * (u[0] * data[xc[0] + yc[1] + zc[0]] + u[1] * data[xc[1] + yc[1] + zc[0]])) +
104  w[1] *
105  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[1]] + u[1] * data[xc[1] + yc[0] + zc[1]]) +
106  v[1] * (u[0] * data[xc[0] + yc[1] + zc[1]] + u[1] * data[xc[1] + yc[1] + zc[1]]));
107  }
108  return 0.0f;
109 }
110 
111 float BLI_voxel_sample_triquadratic(const float *data, const int res[3], const float co[3])
112 {
113  if (data) {
114 
115  const float xf = co[0] * (float)res[0];
116  const float yf = co[1] * (float)res[1];
117  const float zf = co[2] * (float)res[2];
118  const int x = FLOORI(xf), y = FLOORI(yf), z = FLOORI(zf);
119 
120  const int64_t xc[3] = {
121  _clamp(x - 1, 0, res[0] - 1),
122  _clamp(x, 0, res[0] - 1),
123  _clamp(x + 1, 0, res[0] - 1),
124  };
125  const int64_t yc[3] = {
126  _clamp(y - 1, 0, res[1] - 1) * res[0],
127  _clamp(y, 0, res[1] - 1) * res[0],
128  _clamp(y + 1, 0, res[1] - 1) * res[0],
129  };
130  const int64_t zc[3] = {
131  _clamp(z - 1, 0, res[2] - 1) * res[0] * res[1],
132  _clamp(z, 0, res[2] - 1) * res[0] * res[1],
133  _clamp(z + 1, 0, res[2] - 1) * res[0] * res[1],
134  };
135 
136  const float dx = xf - (float)x, dy = yf - (float)y, dz = zf - (float)z;
137  const float u[3] = {dx * (0.5f * dx - 1.0f) + 0.5f, dx * (1.0f - dx) + 0.5f, 0.5f * dx * dx};
138  const float v[3] = {dy * (0.5f * dy - 1.0f) + 0.5f, dy * (1.0f - dy) + 0.5f, 0.5f * dy * dy};
139  const float w[3] = {dz * (0.5f * dz - 1.0f) + 0.5f, dz * (1.0f - dz) + 0.5f, 0.5f * dz * dz};
140 
141  return w[0] *
142  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[0]] + u[1] * data[xc[1] + yc[0] + zc[0]] +
143  u[2] * data[xc[2] + yc[0] + zc[0]]) +
144  v[1] * (u[0] * data[xc[0] + yc[1] + zc[0]] + u[1] * data[xc[1] + yc[1] + zc[0]] +
145  u[2] * data[xc[2] + yc[1] + zc[0]]) +
146  v[2] * (u[0] * data[xc[0] + yc[2] + zc[0]] + u[1] * data[xc[1] + yc[2] + zc[0]] +
147  u[2] * data[xc[2] + yc[2] + zc[0]])) +
148  w[1] *
149  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[1]] + u[1] * data[xc[1] + yc[0] + zc[1]] +
150  u[2] * data[xc[2] + yc[0] + zc[1]]) +
151  v[1] * (u[0] * data[xc[0] + yc[1] + zc[1]] + u[1] * data[xc[1] + yc[1] + zc[1]] +
152  u[2] * data[xc[2] + yc[1] + zc[1]]) +
153  v[2] * (u[0] * data[xc[0] + yc[2] + zc[1]] + u[1] * data[xc[1] + yc[2] + zc[1]] +
154  u[2] * data[xc[2] + yc[2] + zc[1]])) +
155  w[2] *
156  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[2]] + u[1] * data[xc[1] + yc[0] + zc[2]] +
157  u[2] * data[xc[2] + yc[0] + zc[2]]) +
158  v[1] * (u[0] * data[xc[0] + yc[1] + zc[2]] + u[1] * data[xc[1] + yc[1] + zc[2]] +
159  u[2] * data[xc[2] + yc[1] + zc[2]]) +
160  v[2] * (u[0] * data[xc[0] + yc[2] + zc[2]] + u[1] * data[xc[1] + yc[2] + zc[2]] +
161  u[2] * data[xc[2] + yc[2] + zc[2]]));
162  }
163  return 0.0f;
164 }
165 
166 float BLI_voxel_sample_tricubic(const float *data,
167  const int res[3],
168  const float co[3],
169  int bspline)
170 {
171  if (data) {
172 
173  const float xf = co[0] * (float)res[0] - 0.5f;
174  const float yf = co[1] * (float)res[1] - 0.5f;
175  const float zf = co[2] * (float)res[2] - 0.5f;
176  const int x = FLOORI(xf), y = FLOORI(yf), z = FLOORI(zf);
177 
178  const int64_t xc[4] = {
179  _clamp(x - 1, 0, res[0] - 1),
180  _clamp(x, 0, res[0] - 1),
181  _clamp(x + 1, 0, res[0] - 1),
182  _clamp(x + 2, 0, res[0] - 1),
183  };
184  const int64_t yc[4] = {
185  _clamp(y - 1, 0, res[1] - 1) * res[0],
186  _clamp(y, 0, res[1] - 1) * res[0],
187  _clamp(y + 1, 0, res[1] - 1) * res[0],
188  _clamp(y + 2, 0, res[1] - 1) * res[0],
189  };
190  const int64_t zc[4] = {
191  _clamp(z - 1, 0, res[2] - 1) * res[0] * res[1],
192  _clamp(z, 0, res[2] - 1) * res[0] * res[1],
193  _clamp(z + 1, 0, res[2] - 1) * res[0] * res[1],
194  _clamp(z + 2, 0, res[2] - 1) * res[0] * res[1],
195  };
196  const float dx = xf - (float)x, dy = yf - (float)y, dz = zf - (float)z;
197 
198  float u[4], v[4], w[4];
199  if (bspline) { // B-Spline
200  u[0] = (((-1.0f / 6.0f) * dx + 0.5f) * dx - 0.5f) * dx + (1.0f / 6.0f);
201  u[1] = ((0.5f * dx - 1.0f) * dx) * dx + (2.0f / 3.0f);
202  u[2] = ((-0.5f * dx + 0.5f) * dx + 0.5f) * dx + (1.0f / 6.0f);
203  u[3] = (1.0f / 6.0f) * dx * dx * dx;
204  v[0] = (((-1.0f / 6.0f) * dy + 0.5f) * dy - 0.5f) * dy + (1.0f / 6.0f);
205  v[1] = ((0.5f * dy - 1.0f) * dy) * dy + (2.0f / 3.0f);
206  v[2] = ((-0.5f * dy + 0.5f) * dy + 0.5f) * dy + (1.0f / 6.0f);
207  v[3] = (1.0f / 6.0f) * dy * dy * dy;
208  w[0] = (((-1.0f / 6.0f) * dz + 0.5f) * dz - 0.5f) * dz + (1.0f / 6.0f);
209  w[1] = ((0.5f * dz - 1.0f) * dz) * dz + (2.0f / 3.0f);
210  w[2] = ((-0.5f * dz + 0.5f) * dz + 0.5f) * dz + (1.0f / 6.0f);
211  w[3] = (1.0f / 6.0f) * dz * dz * dz;
212  }
213  else { // Catmull-Rom
214  u[0] = ((-0.5f * dx + 1.0f) * dx - 0.5f) * dx;
215  u[1] = ((1.5f * dx - 2.5f) * dx) * dx + 1.0f;
216  u[2] = ((-1.5f * dx + 2.0f) * dx + 0.5f) * dx;
217  u[3] = ((0.5f * dx - 0.5f) * dx) * dx;
218  v[0] = ((-0.5f * dy + 1.0f) * dy - 0.5f) * dy;
219  v[1] = ((1.5f * dy - 2.5f) * dy) * dy + 1.0f;
220  v[2] = ((-1.5f * dy + 2.0f) * dy + 0.5f) * dy;
221  v[3] = ((0.5f * dy - 0.5f) * dy) * dy;
222  w[0] = ((-0.5f * dz + 1.0f) * dz - 0.5f) * dz;
223  w[1] = ((1.5f * dz - 2.5f) * dz) * dz + 1.0f;
224  w[2] = ((-1.5f * dz + 2.0f) * dz + 0.5f) * dz;
225  w[3] = ((0.5f * dz - 0.5f) * dz) * dz;
226  }
227 
228  return w[0] *
229  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[0]] + u[1] * data[xc[1] + yc[0] + zc[0]] +
230  u[2] * data[xc[2] + yc[0] + zc[0]] + u[3] * data[xc[3] + yc[0] + zc[0]]) +
231  v[1] * (u[0] * data[xc[0] + yc[1] + zc[0]] + u[1] * data[xc[1] + yc[1] + zc[0]] +
232  u[2] * data[xc[2] + yc[1] + zc[0]] + u[3] * data[xc[3] + yc[1] + zc[0]]) +
233  v[2] * (u[0] * data[xc[0] + yc[2] + zc[0]] + u[1] * data[xc[1] + yc[2] + zc[0]] +
234  u[2] * data[xc[2] + yc[2] + zc[0]] + u[3] * data[xc[3] + yc[2] + zc[0]]) +
235  v[3] * (u[0] * data[xc[0] + yc[3] + zc[0]] + u[1] * data[xc[1] + yc[3] + zc[0]] +
236  u[2] * data[xc[2] + yc[3] + zc[0]] + u[3] * data[xc[3] + yc[3] + zc[0]])) +
237  w[1] *
238  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[1]] + u[1] * data[xc[1] + yc[0] + zc[1]] +
239  u[2] * data[xc[2] + yc[0] + zc[1]] + u[3] * data[xc[3] + yc[0] + zc[1]]) +
240  v[1] * (u[0] * data[xc[0] + yc[1] + zc[1]] + u[1] * data[xc[1] + yc[1] + zc[1]] +
241  u[2] * data[xc[2] + yc[1] + zc[1]] + u[3] * data[xc[3] + yc[1] + zc[1]]) +
242  v[2] * (u[0] * data[xc[0] + yc[2] + zc[1]] + u[1] * data[xc[1] + yc[2] + zc[1]] +
243  u[2] * data[xc[2] + yc[2] + zc[1]] + u[3] * data[xc[3] + yc[2] + zc[1]]) +
244  v[3] * (u[0] * data[xc[0] + yc[3] + zc[1]] + u[1] * data[xc[1] + yc[3] + zc[1]] +
245  u[2] * data[xc[2] + yc[3] + zc[1]] + u[3] * data[xc[3] + yc[3] + zc[1]])) +
246  w[2] *
247  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[2]] + u[1] * data[xc[1] + yc[0] + zc[2]] +
248  u[2] * data[xc[2] + yc[0] + zc[2]] + u[3] * data[xc[3] + yc[0] + zc[2]]) +
249  v[1] * (u[0] * data[xc[0] + yc[1] + zc[2]] + u[1] * data[xc[1] + yc[1] + zc[2]] +
250  u[2] * data[xc[2] + yc[1] + zc[2]] + u[3] * data[xc[3] + yc[1] + zc[2]]) +
251  v[2] * (u[0] * data[xc[0] + yc[2] + zc[2]] + u[1] * data[xc[1] + yc[2] + zc[2]] +
252  u[2] * data[xc[2] + yc[2] + zc[2]] + u[3] * data[xc[3] + yc[2] + zc[2]]) +
253  v[3] * (u[0] * data[xc[0] + yc[3] + zc[2]] + u[1] * data[xc[1] + yc[3] + zc[2]] +
254  u[2] * data[xc[2] + yc[3] + zc[2]] + u[3] * data[xc[3] + yc[3] + zc[2]])) +
255  w[3] *
256  (v[0] * (u[0] * data[xc[0] + yc[0] + zc[3]] + u[1] * data[xc[1] + yc[0] + zc[3]] +
257  u[2] * data[xc[2] + yc[0] + zc[3]] + u[3] * data[xc[3] + yc[0] + zc[3]]) +
258  v[1] * (u[0] * data[xc[0] + yc[1] + zc[3]] + u[1] * data[xc[1] + yc[1] + zc[3]] +
259  u[2] * data[xc[2] + yc[1] + zc[3]] + u[3] * data[xc[3] + yc[1] + zc[3]]) +
260  v[2] * (u[0] * data[xc[0] + yc[2] + zc[3]] + u[1] * data[xc[1] + yc[2] + zc[3]] +
261  u[2] * data[xc[2] + yc[2] + zc[3]] + u[3] * data[xc[3] + yc[2] + zc[3]]) +
262  v[3] * (u[0] * data[xc[0] + yc[3] + zc[3]] + u[1] * data[xc[1] + yc[3] + zc[3]] +
263  u[2] * data[xc[2] + yc[3] + zc[3]] + u[3] * data[xc[3] + yc[3] + zc[3]]));
264  }
265  return 0.0f;
266 }
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:32
_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 RGB to Bright Vector Camera 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:97
static unsigned a[3]
Definition: RandGen.cpp:92
__int64 int64_t
Definition: stdint.h:92
float BLI_voxel_sample_nearest(const float *data, const int res[3], const float co[3])
Definition: voxel.c:39
BLI_INLINE int FLOORI(float x)
Definition: voxel.c:51
BLI_INLINE int64_t _clamp(int a, int b, int c)
Definition: voxel.c:65
BLI_INLINE float D(const float *data, const int res[3], int x, int y, int z)
Definition: voxel.c:29
float BLI_voxel_sample_trilinear(const float *data, const int res[3], const float co[3])
Definition: voxel.c:70
float BLI_voxel_sample_triquadratic(const float *data, const int res[3], const float co[3])
Definition: voxel.c:111
float BLI_voxel_sample_tricubic(const float *data, const int res[3], const float co[3], int bspline)
Definition: voxel.c:166