[PSDK]
[reactos.git] / reactos / include / dxsdk / d3dx9math.h
1 /*
2 * Copyright (C) 2007 David Adam
3 * Copyright (C) 2007 Tony Wasserka
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 */
19
20 #include <d3dx9.h>
21
22 #ifndef __D3DX9MATH_H__
23 #define __D3DX9MATH_H__
24
25 #include <math.h>
26
27 #define D3DX_PI ((FLOAT)3.141592654)
28 #define D3DX_1BYPI ((FLOAT)0.318309886)
29
30 #define D3DXToRadian(degree) ((degree) * (D3DX_PI / 180.0f))
31 #define D3DXToDegree(radian) ((radian) * (180.0f / D3DX_PI))
32
33
34
35 typedef struct D3DXVECTOR2
36 {
37 #ifdef __cplusplus
38 D3DXVECTOR2();
39 D3DXVECTOR2(CONST FLOAT *pf);
40 D3DXVECTOR2(FLOAT fx, FLOAT fy);
41
42 operator FLOAT* ();
43 operator CONST FLOAT* () const;
44
45 D3DXVECTOR2& operator += (CONST D3DXVECTOR2&);
46 D3DXVECTOR2& operator -= (CONST D3DXVECTOR2&);
47 D3DXVECTOR2& operator *= (FLOAT);
48 D3DXVECTOR2& operator /= (FLOAT);
49
50 D3DXVECTOR2 operator + () const;
51 D3DXVECTOR2 operator - () const;
52
53 D3DXVECTOR2 operator + (CONST D3DXVECTOR2&) const;
54 D3DXVECTOR2 operator - (CONST D3DXVECTOR2&) const;
55 D3DXVECTOR2 operator * (FLOAT) const;
56 D3DXVECTOR2 operator / (FLOAT) const;
57
58 friend D3DXVECTOR2 operator * (FLOAT, CONST D3DXVECTOR2&);
59
60 BOOL operator == (CONST D3DXVECTOR2&) const;
61 BOOL operator != (CONST D3DXVECTOR2&) const;
62 #endif /* __cplusplus */
63 FLOAT x, y;
64 } D3DXVECTOR2, *LPD3DXVECTOR2;
65
66 #ifdef __cplusplus
67 typedef struct D3DXVECTOR3 : public D3DVECTOR
68 {
69 D3DXVECTOR3();
70 D3DXVECTOR3(CONST FLOAT *pf);
71 D3DXVECTOR3(CONST D3DVECTOR& v);
72 D3DXVECTOR3(FLOAT fx, FLOAT fy, FLOAT fz);
73
74 operator FLOAT* ();
75 operator CONST FLOAT* () const;
76
77 D3DXVECTOR3& operator += (CONST D3DXVECTOR3&);
78 D3DXVECTOR3& operator -= (CONST D3DXVECTOR3&);
79 D3DXVECTOR3& operator *= (FLOAT);
80 D3DXVECTOR3& operator /= (FLOAT);
81
82 D3DXVECTOR3 operator + () const;
83 D3DXVECTOR3 operator - () const;
84
85 D3DXVECTOR3 operator + (CONST D3DXVECTOR3&) const;
86 D3DXVECTOR3 operator - (CONST D3DXVECTOR3&) const;
87 D3DXVECTOR3 operator * (FLOAT) const;
88 D3DXVECTOR3 operator / (FLOAT) const;
89
90 friend D3DXVECTOR3 operator * (FLOAT, CONST struct D3DXVECTOR3&);
91
92 BOOL operator == (CONST D3DXVECTOR3&) const;
93 BOOL operator != (CONST D3DXVECTOR3&) const;
94 } D3DXVECTOR3, *LPD3DXVECTOR3;
95 #else /* !__cplusplus */
96 typedef struct _D3DVECTOR D3DXVECTOR3, *LPD3DXVECTOR3;
97 #endif /* !__cplusplus */
98
99 typedef struct D3DXVECTOR4
100 {
101 #ifdef __cplusplus
102 D3DXVECTOR4();
103 D3DXVECTOR4(CONST FLOAT *pf);
104 D3DXVECTOR4(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw);
105
106 operator FLOAT* ();
107 operator CONST FLOAT* () const;
108
109 D3DXVECTOR4& operator += (CONST D3DXVECTOR4&);
110 D3DXVECTOR4& operator -= (CONST D3DXVECTOR4&);
111 D3DXVECTOR4& operator *= (FLOAT);
112 D3DXVECTOR4& operator /= (FLOAT);
113
114 D3DXVECTOR4 operator + () const;
115 D3DXVECTOR4 operator - () const;
116
117 D3DXVECTOR4 operator + (CONST D3DXVECTOR4&) const;
118 D3DXVECTOR4 operator - (CONST D3DXVECTOR4&) const;
119 D3DXVECTOR4 operator * (FLOAT) const;
120 D3DXVECTOR4 operator / (FLOAT) const;
121
122 friend D3DXVECTOR4 operator * (FLOAT, CONST D3DXVECTOR4&);
123
124 BOOL operator == (CONST D3DXVECTOR4&) const;
125 BOOL operator != (CONST D3DXVECTOR4&) const;
126 #endif /* __cplusplus */
127 FLOAT x, y, z, w;
128 } D3DXVECTOR4, *LPD3DXVECTOR4;
129
130 #ifdef __cplusplus
131 typedef struct D3DXMATRIX : public D3DMATRIX
132 {
133 D3DXMATRIX();
134 D3DXMATRIX(CONST FLOAT *pf);
135 D3DXMATRIX(CONST D3DMATRIX& mat);
136 D3DXMATRIX(FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14,
137 FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24,
138 FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34,
139 FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44);
140
141 FLOAT& operator () (UINT row, UINT col);
142 FLOAT operator () (UINT row, UINT col) const;
143
144 operator FLOAT* ();
145 operator CONST FLOAT* () const;
146
147 D3DXMATRIX& operator *= (CONST D3DXMATRIX&);
148 D3DXMATRIX& operator += (CONST D3DXMATRIX&);
149 D3DXMATRIX& operator -= (CONST D3DXMATRIX&);
150 D3DXMATRIX& operator *= (FLOAT);
151 D3DXMATRIX& operator /= (FLOAT);
152
153 D3DXMATRIX operator + () const;
154 D3DXMATRIX operator - () const;
155
156 D3DXMATRIX operator * (CONST D3DXMATRIX&) const;
157 D3DXMATRIX operator + (CONST D3DXMATRIX&) const;
158 D3DXMATRIX operator - (CONST D3DXMATRIX&) const;
159 D3DXMATRIX operator * (FLOAT) const;
160 D3DXMATRIX operator / (FLOAT) const;
161
162 friend D3DXMATRIX operator * (FLOAT, CONST D3DXMATRIX&);
163
164 BOOL operator == (CONST D3DXMATRIX&) const;
165 BOOL operator != (CONST D3DXMATRIX&) const;
166 } D3DXMATRIX, *LPD3DXMATRIX;
167 #else /* !__cplusplus */
168 typedef struct _D3DMATRIX D3DXMATRIX, *LPD3DXMATRIX;
169 #endif /* !__cplusplus */
170
171 typedef struct D3DXQUATERNION
172 {
173 #ifdef __cplusplus
174 D3DXQUATERNION();
175 D3DXQUATERNION(CONST FLOAT *pf);
176 D3DXQUATERNION(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw);
177
178 operator FLOAT* ();
179 operator CONST FLOAT* () const;
180
181 D3DXQUATERNION& operator += (CONST D3DXQUATERNION&);
182 D3DXQUATERNION& operator -= (CONST D3DXQUATERNION&);
183 D3DXQUATERNION& operator *= (CONST D3DXQUATERNION&);
184 D3DXQUATERNION& operator *= (FLOAT);
185 D3DXQUATERNION& operator /= (FLOAT);
186
187 D3DXQUATERNION operator + () const;
188 D3DXQUATERNION operator - () const;
189
190 D3DXQUATERNION operator + (CONST D3DXQUATERNION&) const;
191 D3DXQUATERNION operator - (CONST D3DXQUATERNION&) const;
192 D3DXQUATERNION operator * (CONST D3DXQUATERNION&) const;
193 D3DXQUATERNION operator * (FLOAT) const;
194 D3DXQUATERNION operator / (FLOAT) const;
195
196 friend D3DXQUATERNION operator * (FLOAT, CONST D3DXQUATERNION&);
197
198 BOOL operator == (CONST D3DXQUATERNION&) const;
199 BOOL operator != (CONST D3DXQUATERNION&) const;
200 #endif /* __cplusplus */
201 FLOAT x, y, z, w;
202 } D3DXQUATERNION, *LPD3DXQUATERNION;
203
204 typedef struct D3DXPLANE
205 {
206 #ifdef __cplusplus
207 D3DXPLANE();
208 D3DXPLANE(CONST FLOAT *pf);
209 D3DXPLANE(FLOAT fa, FLOAT fb, FLOAT fc, FLOAT fd);
210
211 operator FLOAT* ();
212 operator CONST FLOAT* () const;
213
214 D3DXPLANE operator + () const;
215 D3DXPLANE operator - () const;
216
217 BOOL operator == (CONST D3DXPLANE&) const;
218 BOOL operator != (CONST D3DXPLANE&) const;
219 #endif /* __cplusplus */
220 FLOAT a, b, c, d;
221 } D3DXPLANE, *LPD3DXPLANE;
222
223 typedef struct D3DXCOLOR
224 {
225 #ifdef __cplusplus
226 D3DXCOLOR();
227 D3DXCOLOR(DWORD col);
228 D3DXCOLOR(CONST FLOAT *pf);
229 D3DXCOLOR(CONST D3DCOLORVALUE& col);
230 D3DXCOLOR(FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa);
231
232 operator DWORD () const;
233
234 operator FLOAT* ();
235 operator CONST FLOAT* () const;
236
237 operator D3DCOLORVALUE* ();
238 operator CONST D3DCOLORVALUE* () const;
239
240 operator D3DCOLORVALUE& ();
241 operator CONST D3DCOLORVALUE& () const;
242
243 D3DXCOLOR& operator += (CONST D3DXCOLOR&);
244 D3DXCOLOR& operator -= (CONST D3DXCOLOR&);
245 D3DXCOLOR& operator *= (FLOAT);
246 D3DXCOLOR& operator /= (FLOAT);
247
248 D3DXCOLOR operator + () const;
249 D3DXCOLOR operator - () const;
250
251 D3DXCOLOR operator + (CONST D3DXCOLOR&) const;
252 D3DXCOLOR operator - (CONST D3DXCOLOR&) const;
253 D3DXCOLOR operator * (FLOAT) const;
254 D3DXCOLOR operator / (FLOAT) const;
255
256 friend D3DXCOLOR operator * (FLOAT, CONST D3DXCOLOR&);
257
258 BOOL operator == (CONST D3DXCOLOR&) const;
259 BOOL operator != (CONST D3DXCOLOR&) const;
260 #endif /* __cplusplus */
261 FLOAT r, g, b, a;
262 } D3DXCOLOR, *LPD3DXCOLOR;
263
264 #ifdef __cplusplus
265 extern "C" {
266 #endif
267
268 D3DXCOLOR* WINAPI D3DXColorAdjustContrast(D3DXCOLOR *pout, CONST D3DXCOLOR *pc, FLOAT s);
269 D3DXCOLOR* WINAPI D3DXColorAdjustSaturation(D3DXCOLOR *pout, CONST D3DXCOLOR *pc, FLOAT s);
270
271 FLOAT WINAPI D3DXFresnelTerm(FLOAT costheta, FLOAT refractionindex);
272
273 D3DXMATRIX* WINAPI D3DXMatrixAffineTransformation(D3DXMATRIX *pout, FLOAT scaling, CONST D3DXVECTOR3 *rotationcenter, CONST D3DXQUATERNION *rotation, CONST D3DXVECTOR3 *translation);
274 D3DXMATRIX* WINAPI D3DXMatrixAffineTransformation2D(D3DXMATRIX *pout, FLOAT scaling, CONST D3DXVECTOR2 *protationcenter, FLOAT rotation, CONST D3DXVECTOR2 *ptranslation);
275 HRESULT WINAPI D3DXMatrixDecompose(D3DXVECTOR3 *poutscale, D3DXQUATERNION *poutrotation, D3DXVECTOR3 *pouttranslation, CONST D3DXMATRIX *pm);
276 FLOAT WINAPI D3DXMatrixDeterminant(CONST D3DXMATRIX *pm);
277 D3DXMATRIX* WINAPI D3DXMatrixInverse(D3DXMATRIX *pout, FLOAT *pdeterminant, CONST D3DXMATRIX *pm);
278 D3DXMATRIX* WINAPI D3DXMatrixLookAtLH(D3DXMATRIX *pout, CONST D3DXVECTOR3 *peye, CONST D3DXVECTOR3 *pat, CONST D3DXVECTOR3 *pup);
279 D3DXMATRIX* WINAPI D3DXMatrixLookAtRH(D3DXMATRIX *pout, CONST D3DXVECTOR3 *peye, CONST D3DXVECTOR3 *pat, CONST D3DXVECTOR3 *pup);
280 D3DXMATRIX* WINAPI D3DXMatrixMultiply(D3DXMATRIX *pout, CONST D3DXMATRIX *pm1, CONST D3DXMATRIX *pm2);
281 D3DXMATRIX* WINAPI D3DXMatrixMultiplyTranspose(D3DXMATRIX *pout, CONST D3DXMATRIX *pm1, CONST D3DXMATRIX *pm2);
282 D3DXMATRIX* WINAPI D3DXMatrixOrthoLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
283 D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
284 D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterRH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
285 D3DXMATRIX* WINAPI D3DXMatrixOrthoLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
286 D3DXMATRIX* WINAPI D3DXMatrixOrthoRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
287 D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovLH(D3DXMATRIX *pout, FLOAT fovy, FLOAT aspect, FLOAT zn, FLOAT zf);
288 D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovRH(D3DXMATRIX *pout, FLOAT fovy, FLOAT aspect, FLOAT zn, FLOAT zf);
289 D3DXMATRIX* WINAPI D3DXMatrixPerspectiveLH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
290 D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterLH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
291 D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterRH(D3DXMATRIX *pout, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf);
292 D3DXMATRIX* WINAPI D3DXMatrixPerspectiveRH(D3DXMATRIX *pout, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf);
293 D3DXMATRIX* WINAPI D3DXMatrixReflect(D3DXMATRIX *pout, CONST D3DXPLANE *pplane);
294 D3DXMATRIX* WINAPI D3DXMatrixRotationAxis(D3DXMATRIX *pout, CONST D3DXVECTOR3 *pv, FLOAT angle);
295 D3DXMATRIX* WINAPI D3DXMatrixRotationQuaternion(D3DXMATRIX *pout, CONST D3DXQUATERNION *pq);
296 D3DXMATRIX* WINAPI D3DXMatrixRotationX(D3DXMATRIX *pout, FLOAT angle);
297 D3DXMATRIX* WINAPI D3DXMatrixRotationY(D3DXMATRIX *pout, FLOAT angle);
298 D3DXMATRIX* WINAPI D3DXMatrixRotationYawPitchRoll(D3DXMATRIX *pout, FLOAT yaw, FLOAT pitch, FLOAT roll);
299 D3DXMATRIX* WINAPI D3DXMatrixRotationZ(D3DXMATRIX *pout, FLOAT angle);
300 D3DXMATRIX* WINAPI D3DXMatrixScaling(D3DXMATRIX *pout, FLOAT sx, FLOAT sy, FLOAT sz);
301 D3DXMATRIX* WINAPI D3DXMatrixShadow(D3DXMATRIX *pout, CONST D3DXVECTOR4 *plight, CONST D3DXPLANE *pPlane);
302 D3DXMATRIX* WINAPI D3DXMatrixTransformation(D3DXMATRIX *pout, CONST D3DXVECTOR3 *pscalingcenter, CONST D3DXQUATERNION *pscalingrotation, CONST D3DXVECTOR3 *pscaling, CONST D3DXVECTOR3 *protationcenter, CONST D3DXQUATERNION *protation, CONST D3DXVECTOR3 *ptranslation);
303 D3DXMATRIX* WINAPI D3DXMatrixTransformation2D(D3DXMATRIX *pout, CONST D3DXVECTOR2 *pscalingcenter, FLOAT scalingrotation, CONST D3DXVECTOR2 *pscaling, CONST D3DXVECTOR2 *protationcenter, FLOAT rotation, CONST D3DXVECTOR2 *ptranslation);
304 D3DXMATRIX* WINAPI D3DXMatrixTranslation(D3DXMATRIX *pout, FLOAT x, FLOAT y, FLOAT z);
305 D3DXMATRIX* WINAPI D3DXMatrixTranspose(D3DXMATRIX *pout, CONST D3DXMATRIX *pm);
306
307 D3DXPLANE* WINAPI D3DXPlaneFromPointNormal(D3DXPLANE *pout, CONST D3DXVECTOR3 *pvpoint, CONST D3DXVECTOR3 *pvnormal);
308 D3DXPLANE* WINAPI D3DXPlaneFromPoints(D3DXPLANE *pout, CONST D3DXVECTOR3 *pv1, CONST D3DXVECTOR3 *pv2, CONST D3DXVECTOR3 *pv3);
309 D3DXVECTOR3* WINAPI D3DXPlaneIntersectLine(D3DXVECTOR3 *pout, CONST D3DXPLANE *pp, CONST D3DXVECTOR3 *pv1, CONST D3DXVECTOR3 *pv2);
310 D3DXPLANE* WINAPI D3DXPlaneNormalize(D3DXPLANE *pout, CONST D3DXPLANE *pp);
311 D3DXPLANE* WINAPI D3DXPlaneTransform(D3DXPLANE *pout, CONST D3DXPLANE *pplane, CONST D3DXMATRIX *pm);
312 D3DXPLANE* WINAPI D3DXPlaneTransformArray(D3DXPLANE *pout, UINT outstride, CONST D3DXPLANE *pplane, UINT pstride, CONST D3DXMATRIX *pm, UINT n);
313
314 D3DXQUATERNION* WINAPI D3DXQuaternionBaryCentric(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq1, CONST D3DXQUATERNION *pq2, CONST D3DXQUATERNION *pq3, FLOAT f, FLOAT g);
315 D3DXQUATERNION* WINAPI D3DXQuaternionExp(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq);
316 D3DXQUATERNION* WINAPI D3DXQuaternionInverse(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq);
317 D3DXQUATERNION* WINAPI D3DXQuaternionLn(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq);
318 D3DXQUATERNION* WINAPI D3DXQuaternionMultiply(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq1, CONST D3DXQUATERNION *pq2);
319 D3DXQUATERNION* WINAPI D3DXQuaternionNormalize(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq);
320 D3DXQUATERNION* WINAPI D3DXQuaternionRotationAxis(D3DXQUATERNION *pout, CONST D3DXVECTOR3 *pv, FLOAT angle);
321 D3DXQUATERNION* WINAPI D3DXQuaternionRotationMatrix(D3DXQUATERNION *pout, CONST D3DXMATRIX *pm);
322 D3DXQUATERNION* WINAPI D3DXQuaternionRotationYawPitchRoll(D3DXQUATERNION *pout, FLOAT yaw, FLOAT pitch, FLOAT roll);
323 D3DXQUATERNION* WINAPI D3DXQuaternionSlerp(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq1, CONST D3DXQUATERNION *pq2, FLOAT t);
324 D3DXQUATERNION* WINAPI D3DXQuaternionSquad(D3DXQUATERNION *pout, CONST D3DXQUATERNION *pq1, CONST D3DXQUATERNION *pq2, CONST D3DXQUATERNION *pq3, CONST D3DXQUATERNION *pq4, FLOAT t);
325 void WINAPI D3DXQuaternionToAxisAngle(CONST D3DXQUATERNION *pq, D3DXVECTOR3 *paxis, FLOAT *pangle);
326
327 D3DXVECTOR2* WINAPI D3DXVec2BaryCentric(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv1, CONST D3DXVECTOR2 *pv2, CONST D3DXVECTOR2 *pv3, FLOAT f, FLOAT g);
328 D3DXVECTOR2* WINAPI D3DXVec2CatmullRom(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv0, CONST D3DXVECTOR2 *pv1, CONST D3DXVECTOR2 *pv2, CONST D3DXVECTOR2 *pv3, FLOAT s);
329 D3DXVECTOR2* WINAPI D3DXVec2Hermite(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv1, CONST D3DXVECTOR2 *pt1, CONST D3DXVECTOR2 *pv2, CONST D3DXVECTOR2 *pt2, FLOAT s);
330 D3DXVECTOR2* WINAPI D3DXVec2Normalize(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv);
331 D3DXVECTOR4* WINAPI D3DXVec2Transform(D3DXVECTOR4 *pout, CONST D3DXVECTOR2 *pv, CONST D3DXMATRIX *pm);
332 D3DXVECTOR4* WINAPI D3DXVec2TransformArray(D3DXVECTOR4 *pout, UINT outstride, CONST D3DXVECTOR2 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n);
333 D3DXVECTOR2* WINAPI D3DXVec2TransformCoord(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv, CONST D3DXMATRIX *pm);
334 D3DXVECTOR2* WINAPI D3DXVec2TransformCoordArray(D3DXVECTOR2 *pout, UINT outstride, CONST D3DXVECTOR2 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n);
335 D3DXVECTOR2* WINAPI D3DXVec2TransformNormal(D3DXVECTOR2 *pout, CONST D3DXVECTOR2 *pv, CONST D3DXMATRIX *pm);
336 D3DXVECTOR2* WINAPI D3DXVec2TransformNormalArray(D3DXVECTOR2 *pout, UINT outstride, CONST D3DXVECTOR2 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n);
337
338 D3DXVECTOR3* WINAPI D3DXVec3BaryCentric(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv1, CONST D3DXVECTOR3 *pv2, CONST D3DXVECTOR3 *pv3, FLOAT f, FLOAT g);
339 D3DXVECTOR3* WINAPI D3DXVec3CatmullRom( D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv0, CONST D3DXVECTOR3 *pv1, CONST D3DXVECTOR3 *pv2, CONST D3DXVECTOR3 *pv3, FLOAT s);
340 D3DXVECTOR3* WINAPI D3DXVec3Hermite(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv1, CONST D3DXVECTOR3 *pt1, CONST D3DXVECTOR3 *pv2, CONST D3DXVECTOR3 *pt2, FLOAT s);
341 D3DXVECTOR3* WINAPI D3DXVec3Normalize(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv);
342 D3DXVECTOR3* WINAPI D3DXVec3Project(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv, CONST D3DVIEWPORT9 *pviewport, CONST D3DXMATRIX *pprojection, CONST D3DXMATRIX *pview, CONST D3DXMATRIX *pworld);
343 D3DXVECTOR3* WINAPI D3DXVec3ProjectArray(D3DXVECTOR3 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DVIEWPORT9 *pviewport, CONST D3DXMATRIX *pprojection, CONST D3DXMATRIX *pview, CONST D3DXMATRIX *pworld, UINT n);
344 D3DXVECTOR4* WINAPI D3DXVec3Transform(D3DXVECTOR4 *pout, CONST D3DXVECTOR3 *pv, CONST D3DXMATRIX *pm);
345 D3DXVECTOR4* WINAPI D3DXVec3TransformArray(D3DXVECTOR4 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n);
346 D3DXVECTOR3* WINAPI D3DXVec3TransformCoord(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv, CONST D3DXMATRIX *pm);
347 D3DXVECTOR3* WINAPI D3DXVec3TransformCoordArray(D3DXVECTOR3 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n);
348 D3DXVECTOR3* WINAPI D3DXVec3TransformNormal(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv, CONST D3DXMATRIX *pm);
349 D3DXVECTOR3* WINAPI D3DXVec3TransformNormalArray(D3DXVECTOR3 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n);
350 D3DXVECTOR3* WINAPI D3DXVec3Unproject(D3DXVECTOR3 *pout, CONST D3DXVECTOR3 *pv, CONST D3DVIEWPORT9 *pviewport, CONST D3DXMATRIX *pprojection, CONST D3DXMATRIX *pview, CONST D3DXMATRIX *pworld);
351 D3DXVECTOR3* WINAPI D3DXVec3UnprojectArray(D3DXVECTOR3 *pout, UINT outstride, CONST D3DXVECTOR3 *pv, UINT vstride, CONST D3DVIEWPORT9 *pviewport, CONST D3DXMATRIX *pprojection, CONST D3DXMATRIX *pview, CONST D3DXMATRIX *pworld, UINT n);
352
353 D3DXVECTOR4* WINAPI D3DXVec4BaryCentric(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv1, CONST D3DXVECTOR4 *pv2, CONST D3DXVECTOR4 *pv3, FLOAT f, FLOAT g);
354 D3DXVECTOR4* WINAPI D3DXVec4CatmullRom(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv0, CONST D3DXVECTOR4 *pv1, CONST D3DXVECTOR4 *pv2, CONST D3DXVECTOR4 *pv3, FLOAT s);
355 D3DXVECTOR4* WINAPI D3DXVec4Cross(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv1, CONST D3DXVECTOR4 *pv2, CONST D3DXVECTOR4 *pv3);
356 D3DXVECTOR4* WINAPI D3DXVec4Hermite(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv1, CONST D3DXVECTOR4 *pt1, CONST D3DXVECTOR4 *pv2, CONST D3DXVECTOR4 *pt2, FLOAT s);
357 D3DXVECTOR4* WINAPI D3DXVec4Normalize(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv);
358 D3DXVECTOR4* WINAPI D3DXVec4Transform(D3DXVECTOR4 *pout, CONST D3DXVECTOR4 *pv, CONST D3DXMATRIX *pm);
359 D3DXVECTOR4* WINAPI D3DXVec4TransformArray(D3DXVECTOR4 *pout, UINT outstride, CONST D3DXVECTOR4 *pv, UINT vstride, CONST D3DXMATRIX *pm, UINT n);
360
361 #ifdef __cplusplus
362 }
363 #endif
364
365 typedef interface ID3DXMatrixStack *LPD3DXMATRIXSTACK;
366
367 DEFINE_GUID(IID_ID3DXMatrixStack,
368 0xc7885ba7, 0xf990, 0x4fe7, 0x92, 0x2d, 0x85, 0x15, 0xe4, 0x77, 0xdd, 0x85);
369
370 #undef INTERFACE
371 #define INTERFACE ID3DXMatrixStack
372
373 DECLARE_INTERFACE_(ID3DXMatrixStack, IUnknown)
374 {
375 STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE;
376 STDMETHOD_(ULONG,AddRef)(THIS) PURE;
377 STDMETHOD_(ULONG,Release)(THIS) PURE;
378 STDMETHOD(Pop)(THIS) PURE;
379 STDMETHOD(Push)(THIS) PURE;
380 STDMETHOD(LoadIdentity)(THIS) PURE;
381 STDMETHOD(LoadMatrix)(THIS_ CONST D3DXMATRIX* pM ) PURE;
382 STDMETHOD(MultMatrix)(THIS_ CONST D3DXMATRIX* pM ) PURE;
383 STDMETHOD(MultMatrixLocal)(THIS_ CONST D3DXMATRIX* pM ) PURE;
384 STDMETHOD(RotateAxis)(THIS_ CONST D3DXVECTOR3* pV, FLOAT Angle) PURE;
385 STDMETHOD(RotateAxisLocal)(THIS_ CONST D3DXVECTOR3* pV, FLOAT Angle) PURE;
386 STDMETHOD(RotateYawPitchRoll)(THIS_ FLOAT Yaw, FLOAT Pitch, FLOAT Roll) PURE;
387 STDMETHOD(RotateYawPitchRollLocal)(THIS_ FLOAT Yaw, FLOAT Pitch, FLOAT Roll) PURE;
388 STDMETHOD(Scale)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;
389 STDMETHOD(ScaleLocal)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;
390 STDMETHOD(Translate)(THIS_ FLOAT x, FLOAT y, FLOAT z ) PURE;
391 STDMETHOD(TranslateLocal)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE;
392 STDMETHOD_(D3DXMATRIX*, GetTop)(THIS) PURE;
393 };
394
395 #undef INTERFACE
396
397 #if !defined(__cplusplus) || defined(CINTERFACE)
398
399 #define ID3DXMatrixStack_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
400 #define ID3DXMatrixStack_AddRef(p) (p)->lpVtbl->AddRef(p)
401 #define ID3DXMatrixStack_Release(p) (p)->lpVtbl->Release(p)
402 #define ID3DXMatrixStack_Pop(p) (p)->lpVtbl->Pop(p)
403 #define ID3DXMatrixStack_Push(p) (p)->lpVtbl->Push(p)
404 #define ID3DXMatrixStack_LoadIdentity(p) (p)->lpVtbl->LoadIdentity(p)
405 #define ID3DXMatrixStack_LoadMatrix(p,a) (p)->lpVtbl->LoadMatrix(p,a)
406 #define ID3DXMatrixStack_MultMatrix(p,a) (p)->lpVtbl->MultMatrix(p,a)
407 #define ID3DXMatrixStack_MultMatrixLocal(p,a) (p)->lpVtbl->MultMatrixLocal(p,a)
408 #define ID3DXMatrixStack_RotateAxis(p,a,b) (p)->lpVtbl->RotateAxis(p,a,b)
409 #define ID3DXMatrixStack_RotateAxisLocal(p,a,b) (p)->lpVtbl->RotateAxisLocal(p,a,b)
410 #define ID3DXMatrixStack_RotateYawPitchRoll(p,a,b,c) (p)->lpVtbl->RotateYawPitchRoll(p,a,b,c)
411 #define ID3DXMatrixStack_RotateYawPitchRollLocal(p,a,b,c) (p)->lpVtbl->RotateYawPitchRollLocal(p,a,b,c)
412 #define ID3DXMatrixStack_Scale(p,a,b,c) (p)->lpVtbl->Scale(p,a,b,c)
413 #define ID3DXMatrixStack_ScaleLocal(p,a,b,c) (p)->lpVtbl->ScaleLocal(p,a,b,c)
414 #define ID3DXMatrixStack_Translate(p,a,b,c) (p)->lpVtbl->Translate(p,a,b,c)
415 #define ID3DXMatrixStack_TranslateLocal(p,a,b,c) (p)->lpVtbl->TranslateLocal(p,a,b,c)
416 #define ID3DXMatrixStack_GetTop(p) (p)->lpVtbl->GetTop(p)
417
418 #endif
419
420 #ifdef __cplusplus
421 extern "C" {
422 #endif
423
424 HRESULT WINAPI D3DXCreateMatrixStack(DWORD flags, LPD3DXMATRIXSTACK* ppstack);
425
426 #ifdef __cplusplus
427 }
428 #endif
429
430 #include <d3dx9math.inl>
431
432 #endif /* __D3DX9MATH_H__ */