Blender  V2.93
BLI_math_rotation.h
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  * The Original Code is: some of this file.
20  */
21 
22 #pragma once
23 
28 #include "BLI_utildefines.h"
29 #include "DNA_vec_types.h"
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 #define RAD2DEG(_rad) ((_rad) * (180.0 / M_PI))
36 #define DEG2RAD(_deg) ((_deg) * (M_PI / 180.0))
37 
38 #define RAD2DEGF(_rad) ((_rad) * (float)(180.0 / M_PI))
39 #define DEG2RADF(_deg) ((_deg) * (float)(M_PI / 180.0))
40 
41 /******************************** Quaternions ********************************/
42 /* stored in (w, x, y, z) order */
43 
44 /* init */
45 void unit_axis_angle(float axis[3], float *angle);
46 void unit_qt(float q[4]);
47 void copy_qt_qt(float q[4], const float a[4]);
48 
49 /* arithmetic */
50 void mul_qt_qtqt(float q[4], const float a[4], const float b[4]);
51 void mul_qt_v3(const float q[4], float r[3]);
52 void mul_qt_fl(float q[4], const float f);
53 
54 void pow_qt_fl_normalized(float q[4], const float f);
55 
56 void sub_qt_qtqt(float q[4], const float a[4], const float b[4]);
57 
58 void invert_qt(float q[4]);
59 void invert_qt_qt(float q1[4], const float q2[4]);
60 void invert_qt_normalized(float q[4]);
61 void invert_qt_qt_normalized(float q1[4], const float q2[4]);
62 void conjugate_qt(float q[4]);
63 void conjugate_qt_qt(float q1[4], const float q2[4]);
64 float dot_qtqt(const float a[4], const float b[4]);
65 float normalize_qt(float q[4]);
66 float normalize_qt_qt(float r[4], const float q[4]);
67 
68 /* comparison */
69 bool is_zero_qt(const float q[4]);
70 
71 /* interpolation */
72 void interp_dot_slerp(const float t, const float cosom, float w[2]);
73 void interp_qt_qtqt(float q[4], const float a[4], const float b[4], const float t);
74 void add_qt_qtqt(float q[4], const float a[4], const float b[4], const float t);
75 
76 /* conversion */
77 void quat_to_mat3(float mat[3][3], const float q[4]);
78 void quat_to_mat4(float mat[4][4], const float q[4]);
79 
80 void quat_to_compatible_quat(float q[4], const float a[4], const float old[4]);
81 
82 void mat3_normalized_to_quat(float q[4], const float mat[3][3]);
83 void mat4_normalized_to_quat(float q[4], const float mat[4][4]);
84 void mat3_to_quat(float q[4], const float mat[3][3]);
85 void mat4_to_quat(float q[4], const float mat[4][4]);
86 void tri_to_quat_ex(float quat[4],
87  const float v1[3],
88  const float v2[3],
89  const float v3[3],
90  const float no_orig[3]);
91 float tri_to_quat(float q[4], const float a[3], const float b[3], const float c[3]);
92 void vec_to_quat(float q[4], const float vec[3], short axis, const short upflag);
93 /* note: v1 and v2 must be normalized */
94 void rotation_between_vecs_to_mat3(float m[3][3], const float v1[3], const float v2[3]);
95 void rotation_between_vecs_to_quat(float q[4], const float v1[3], const float v2[3]);
96 void rotation_between_quats_to_quat(float q[4], const float q1[4], const float q2[4]);
97 
98 float quat_split_swing_and_twist(const float q[4], int axis, float r_swing[4], float r_twist[4]);
99 
100 float angle_normalized_qt(const float q[4]);
101 float angle_normalized_qtqt(const float q1[4], const float q2[4]);
102 float angle_qt(const float q[4]);
103 float angle_qtqt(const float q1[4], const float q2[4]);
104 
105 float angle_signed_normalized_qt(const float q[4]);
106 float angle_signed_normalized_qtqt(const float q1[4], const float q2[4]);
107 float angle_signed_qt(const float q[4]);
108 float angle_signed_qtqt(const float q1[4], const float q2[4]);
109 
110 /* TODO: don't what this is, but it's not the same as mat3_to_quat */
111 void mat3_to_quat_is_ok(float q[4], const float mat[3][3]);
112 
113 /* other */
114 void print_qt(const char *str, const float q[4]);
115 
116 #define print_qt_id(q) print_qt(STRINGIFY(q), q)
117 
118 /******************************** Axis Angle *********************************/
119 
120 /* conversion */
121 void axis_angle_normalized_to_quat(float r[4], const float axis[3], const float angle);
122 void axis_angle_to_quat(float r[4], const float axis[3], const float angle);
123 void axis_angle_to_mat3(float R[3][3], const float axis[3], const float angle);
124 void axis_angle_normalized_to_mat3_ex(float mat[3][3],
125  const float axis[3],
126  const float angle_sin,
127  const float angle_cos);
128 void axis_angle_normalized_to_mat3(float R[3][3], const float axis[3], const float angle);
129 void axis_angle_to_mat4(float R[4][4], const float axis[3], const float angle);
130 
131 void mat3_normalized_to_axis_angle(float axis[3], float *angle, const float M[3][3]);
132 void mat4_normalized_to_axis_angle(float axis[3], float *angle, const float M[4][4]);
133 void mat3_to_axis_angle(float axis[3], float *angle, const float M[3][3]);
134 void mat4_to_axis_angle(float axis[3], float *angle, const float M[4][4]);
135 void quat_to_axis_angle(float axis[3], float *angle, const float q[4]);
136 
137 void angle_to_mat2(float R[2][2], const float angle);
138 void axis_angle_to_mat3_single(float R[3][3], const char axis, const float angle);
139 void axis_angle_to_mat4_single(float R[4][4], const char axis, const float angle);
140 
141 void axis_angle_to_quat_single(float q[4], const char axis, const float angle);
142 
143 /****************************** Exponential Map ******************************/
144 void quat_to_expmap(float expmap[3], const float q[4]);
145 void quat_normalized_to_expmap(float expmap[3], const float q[4]);
146 void expmap_to_quat(float r[4], const float expmap[3]);
147 
148 /******************************** XYZ Eulers *********************************/
149 
150 void eul_to_quat(float quat[4], const float eul[3]);
151 void eul_to_mat3(float mat[3][3], const float eul[3]);
152 void eul_to_mat4(float mat[4][4], const float eul[3]);
153 
154 void mat3_normalized_to_eul(float eul[3], const float mat[3][3]);
155 void mat4_normalized_to_eul(float eul[3], const float mat[4][4]);
156 void mat3_to_eul(float eul[3], const float mat[3][3]);
157 void mat4_to_eul(float eul[3], const float mat[4][4]);
158 void quat_to_eul(float eul[3], const float quat[4]);
159 
160 void mat3_normalized_to_compatible_eul(float eul[3], const float old[3], float mat[3][3]);
161 void mat3_to_compatible_eul(float eul[3], const float old[3], float mat[3][3]);
162 void quat_to_compatible_eul(float eul[3], const float oldrot[3], const float quat[4]);
163 void compatible_eul(float eul[3], const float old[3]);
164 
165 void rotate_eul(float eul[3], const char axis, const float angle);
166 
167 /************************** Arbitrary Order Eulers ***************************/
168 
169 /* warning: must match the eRotationModes in DNA_action_types.h
170  * order matters - types are saved to file. */
171 
172 typedef enum eEulerRotationOrders {
173  EULER_ORDER_DEFAULT = 1, /* blender classic = XYZ */
180  /* There are 6 more entries with duplicate entries included. */
182 
183 void eulO_to_quat(float quat[4], const float eul[3], const short order);
184 void eulO_to_mat3(float mat[3][3], const float eul[3], const short order);
185 void eulO_to_mat4(float mat[4][4], const float eul[3], const short order);
186 void eulO_to_axis_angle(float axis[3], float *angle, const float eul[3], const short order);
187 void eulO_to_gimbal_axis(float gmat[3][3], const float eul[3], const short order);
188 
189 void mat3_normalized_to_eulO(float eul[3], const short order, const float mat[3][3]);
190 void mat4_normalized_to_eulO(float eul[3], const short order, const float mat[4][4]);
191 void mat3_to_eulO(float eul[3], const short order, const float mat[3][3]);
192 void mat4_to_eulO(float eul[3], const short order, const float mat[4][4]);
193 void quat_to_eulO(float eul[3], const short order, const float quat[4]);
194 void axis_angle_to_eulO(float eul[3], const short order, const float axis[3], const float angle);
195 
196 void mat3_normalized_to_compatible_eulO(float eul[3],
197  const float old[3],
198  const short order,
199  const float mat[3][3]);
200 void mat4_normalized_to_compatible_eulO(float eul[3],
201  const float old[3],
202  const short order,
203  const float mat[4][4]);
204 void mat3_to_compatible_eulO(float eul[3],
205  const float old[3],
206  const short order,
207  const float mat[3][3]);
208 void mat4_to_compatible_eulO(float eul[3],
209  const float old[3],
210  const short order,
211  const float mat[4][4]);
212 void quat_to_compatible_eulO(float eul[3],
213  const float old[3],
214  const short order,
215  const float quat[4]);
216 
217 void rotate_eulO(float eul[3], const short order, char axis, float angle);
218 
219 /******************************* Dual Quaternions ****************************/
220 
221 void copy_dq_dq(DualQuat *r, const DualQuat *dq);
222 void normalize_dq(DualQuat *dq, float totw);
223 void add_weighted_dq_dq(DualQuat *dq_sum, const DualQuat *dq, float weight);
224 void mul_v3m3_dq(float r[3], float R[3][3], DualQuat *dq);
225 
226 void mat4_to_dquat(DualQuat *dq, const float basemat[4][4], const float mat[4][4]);
227 void dquat_to_mat4(float R[4][4], const DualQuat *dq);
228 
229 void quat_apply_track(float quat[4], short axis, short upflag);
230 void vec_apply_track(float vec[3], short axis);
231 
232 float focallength_to_fov(float focal_length, float sensor);
233 float fov_to_focallength(float fov, float sensor);
234 
235 float angle_wrap_rad(float angle);
236 float angle_wrap_deg(float angle);
237 
238 float angle_compat_rad(float angle, float angle_compat);
239 
241  int src_forward, int src_up, int dst_forward, int dst_up, float r_mat[3][3]);
242 bool mat3_from_axis_conversion_single(int src_axis, int dst_axis, float r_mat[3][3]);
243 
244 #ifdef __cplusplus
245 }
246 #endif
float angle_compat_rad(float angle, float angle_compat)
void quat_to_eulO(float eul[3], const short order, const float quat[4])
void rotation_between_quats_to_quat(float q[4], const float q1[4], const float q2[4])
void mat3_to_compatible_eul(float eul[3], const float old[3], float mat[3][3])
float angle_qtqt(const float q1[4], const float q2[4])
void angle_to_mat2(float R[2][2], const float angle)
void mat4_to_axis_angle(float axis[3], float *angle, const float M[4][4])
float angle_signed_normalized_qtqt(const float q1[4], const float q2[4])
void rotation_between_vecs_to_quat(float q[4], const float v1[3], const float v2[3])
void print_qt(const char *str, const float q[4])
void vec_apply_track(float vec[3], short axis)
float angle_normalized_qt(const float q[4])
float tri_to_quat(float q[4], const float a[3], const float b[3], const float c[3])
float angle_signed_qt(const float q[4])
void invert_qt_normalized(float q[4])
void invert_qt_qt(float q1[4], const float q2[4])
void conjugate_qt_qt(float q1[4], const float q2[4])
void eul_to_mat3(float mat[3][3], const float eul[3])
void eulO_to_quat(float quat[4], const float eul[3], const short order)
void rotate_eulO(float eul[3], const short order, char axis, float angle)
void add_weighted_dq_dq(DualQuat *dq_sum, const DualQuat *dq, float weight)
void eulO_to_axis_angle(float axis[3], float *angle, const float eul[3], const short order)
void mul_qt_fl(float q[4], const float f)
void axis_angle_normalized_to_mat3_ex(float mat[3][3], const float axis[3], const float angle_sin, const float angle_cos)
eEulerRotationOrders
@ EULER_ORDER_ZXY
@ EULER_ORDER_XZY
@ EULER_ORDER_XYZ
@ EULER_ORDER_DEFAULT
@ EULER_ORDER_YZX
@ EULER_ORDER_ZYX
@ EULER_ORDER_YXZ
void axis_angle_to_mat3_single(float R[3][3], const char axis, const float angle)
void sub_qt_qtqt(float q[4], const float a[4], const float b[4])
void mat3_to_quat(float q[4], const float mat[3][3])
void mat3_normalized_to_compatible_eul(float eul[3], const float old[3], float mat[3][3])
void mat4_to_eul(float eul[3], const float mat[4][4])
void axis_angle_to_quat(float r[4], const float axis[3], const float angle)
void mat3_to_eulO(float eul[3], const short order, const float mat[3][3])
float normalize_qt(float q[4])
void invert_qt(float q[4])
void mat4_to_compatible_eulO(float eul[3], const float old[3], const short order, const float mat[4][4])
void quat_normalized_to_expmap(float expmap[3], const float q[4])
void dquat_to_mat4(float R[4][4], const DualQuat *dq)
void mul_qt_v3(const float q[4], float r[3])
Definition: math_rotation.c:97
void interp_dot_slerp(const float t, const float cosom, float w[2])
void unit_qt(float q[4])
Definition: math_rotation.c:46
void axis_angle_normalized_to_mat3(float R[3][3], const float axis[3], const float angle)
void eul_to_quat(float quat[4], const float eul[3])
void axis_angle_normalized_to_quat(float r[4], const float axis[3], const float angle)
void quat_to_compatible_eulO(float eul[3], const float old[3], const short order, const float quat[4])
float angle_signed_normalized_qt(const float q[4])
void quat_to_eul(float eul[3], const float quat[4])
float normalize_qt_qt(float r[4], const float q[4])
float dot_qtqt(const float a[4], const float b[4])
void invert_qt_qt_normalized(float q1[4], const float q2[4])
void mat3_normalized_to_axis_angle(float axis[3], float *angle, const float M[3][3])
bool is_zero_qt(const float q[4])
Definition: math_rotation.c:60
void rotate_eul(float eul[3], const char axis, const float angle)
void mat3_normalized_to_eul(float eul[3], const float mat[3][3])
void mat3_to_axis_angle(float axis[3], float *angle, const float M[3][3])
void mul_qt_qtqt(float q[4], const float a[4], const float b[4])
Definition: math_rotation.c:65
void axis_angle_to_quat_single(float q[4], const char axis, const float angle)
void quat_to_axis_angle(float axis[3], float *angle, const float q[4])
void mat3_to_eul(float eul[3], const float mat[3][3])
void mat3_normalized_to_compatible_eulO(float eul[3], const float old[3], const short order, const float mat[3][3])
void quat_to_expmap(float expmap[3], const float q[4])
void mat4_normalized_to_compatible_eulO(float eul[3], const float old[3], const short order, const float mat[4][4])
void mat4_to_dquat(DualQuat *dq, const float basemat[4][4], const float mat[4][4])
void copy_dq_dq(DualQuat *r, const DualQuat *dq)
void axis_angle_to_eulO(float eul[3], const short order, const float axis[3], const float angle)
void mat4_to_quat(float q[4], const float mat[4][4])
void rotation_between_vecs_to_mat3(float m[3][3], const float v1[3], const float v2[3])
bool mat3_from_axis_conversion(int src_forward, int src_up, int dst_forward, int dst_up, float r_mat[3][3])
void eulO_to_mat3(float mat[3][3], const float eul[3], const short order)
float focallength_to_fov(float focal_length, float sensor)
void axis_angle_to_mat3(float R[3][3], const float axis[3], const float angle)
void mat3_to_quat_is_ok(float q[4], const float mat[3][3])
void mul_v3m3_dq(float r[3], float R[3][3], DualQuat *dq)
void interp_qt_qtqt(float q[4], const float a[4], const float b[4], const float t)
void conjugate_qt(float q[4])
void quat_apply_track(float quat[4], short axis, short upflag)
void mat4_normalized_to_axis_angle(float axis[3], float *angle, const float M[4][4])
void tri_to_quat_ex(float quat[4], const float v1[3], const float v2[3], const float v3[3], const float no_orig[3])
void axis_angle_to_mat4(float R[4][4], const float axis[3], const float angle)
void mat4_normalized_to_quat(float q[4], const float mat[4][4])
void quat_to_compatible_eul(float eul[3], const float oldrot[3], const float quat[4])
float fov_to_focallength(float fov, float sensor)
void axis_angle_to_mat4_single(float R[4][4], const char axis, const float angle)
float angle_wrap_deg(float angle)
void unit_axis_angle(float axis[3], float *angle)
Definition: math_rotation.c:38
float angle_qt(const float q[4])
void compatible_eul(float eul[3], const float old[3])
void normalize_dq(DualQuat *dq, float totw)
void copy_qt_qt(float q[4], const float a[4])
Definition: math_rotation.c:52
float angle_wrap_rad(float angle)
void mat3_normalized_to_eulO(float eul[3], const short order, const float mat[3][3])
void quat_to_compatible_quat(float q[4], const float a[4], const float old[4])
void quat_to_mat3(float mat[3][3], const float q[4])
void mat3_to_compatible_eulO(float eul[3], const float old[3], const short order, const float mat[3][3])
void expmap_to_quat(float r[4], const float expmap[3])
void eulO_to_mat4(float mat[4][4], const float eul[3], const short order)
void mat4_normalized_to_eul(float eul[3], const float mat[4][4])
void mat4_normalized_to_eulO(float eul[3], const short order, const float mat[4][4])
float quat_split_swing_and_twist(const float q[4], int axis, float r_swing[4], float r_twist[4])
void mat3_normalized_to_quat(float q[4], const float mat[3][3])
float angle_signed_qtqt(const float q1[4], const float q2[4])
float angle_normalized_qtqt(const float q1[4], const float q2[4])
void pow_qt_fl_normalized(float q[4], const float f)
void mat4_to_eulO(float eul[3], const short order, const float mat[4][4])
void vec_to_quat(float q[4], const float vec[3], short axis, const short upflag)
void eul_to_mat4(float mat[4][4], const float eul[3])
void add_qt_qtqt(float q[4], const float a[4], const float b[4], const float t)
void quat_to_mat4(float mat[4][4], const float q[4])
bool mat3_from_axis_conversion_single(int src_axis, int dst_axis, float r_mat[3][3])
void eulO_to_gimbal_axis(float gmat[3][3], const float eul[3], const short order)
_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 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 t
_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 order
_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 v1
ATTR_WARN_UNUSED_RESULT const BMVert * v2
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition: btQuadWord.h:119
SIMD_FORCE_INLINE btScalar angle(const btVector3 &v) const
Return the angle between this and another vector.
Definition: btVector3.h:356
#define str(s)
#define M
#define R
static unsigned c
Definition: RandGen.cpp:97
static unsigned a[3]
Definition: RandGen.cpp:92