[1166] | 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 | #ifndef __D3DX9MATH_INL__
|
---|
| 21 | #define __D3DX9MATH_INL__
|
---|
| 22 |
|
---|
| 23 | /* constructors & operators */
|
---|
| 24 | #ifdef __cplusplus
|
---|
| 25 |
|
---|
| 26 | inline D3DXVECTOR2::D3DXVECTOR2()
|
---|
| 27 | {
|
---|
| 28 | }
|
---|
| 29 |
|
---|
| 30 | inline D3DXVECTOR2::D3DXVECTOR2(const FLOAT *pf)
|
---|
| 31 | {
|
---|
| 32 | if(!pf) return;
|
---|
| 33 | x = pf[0];
|
---|
| 34 | y = pf[1];
|
---|
| 35 | }
|
---|
| 36 |
|
---|
| 37 | inline D3DXVECTOR2::D3DXVECTOR2(FLOAT fx, FLOAT fy)
|
---|
| 38 | {
|
---|
| 39 | x = fx;
|
---|
| 40 | y = fy;
|
---|
| 41 | }
|
---|
| 42 |
|
---|
| 43 | inline D3DXVECTOR2::operator FLOAT* ()
|
---|
| 44 | {
|
---|
| 45 | return (FLOAT*)&x;
|
---|
| 46 | }
|
---|
| 47 |
|
---|
| 48 | inline D3DXVECTOR2::operator const FLOAT* () const
|
---|
| 49 | {
|
---|
| 50 | return (const FLOAT*)&x;
|
---|
| 51 | }
|
---|
| 52 |
|
---|
| 53 | inline D3DXVECTOR2& D3DXVECTOR2::operator += (const D3DXVECTOR2& v)
|
---|
| 54 | {
|
---|
| 55 | x += v.x;
|
---|
| 56 | y += v.y;
|
---|
| 57 | return *this;
|
---|
| 58 | }
|
---|
| 59 |
|
---|
| 60 | inline D3DXVECTOR2& D3DXVECTOR2::operator -= (const D3DXVECTOR2& v)
|
---|
| 61 | {
|
---|
| 62 | x -= v.x;
|
---|
| 63 | y -= v.y;
|
---|
| 64 | return *this;
|
---|
| 65 | }
|
---|
| 66 |
|
---|
| 67 | inline D3DXVECTOR2& D3DXVECTOR2::operator *= (FLOAT f)
|
---|
| 68 | {
|
---|
| 69 | x *= f;
|
---|
| 70 | y *= f;
|
---|
| 71 | return *this;
|
---|
| 72 | }
|
---|
| 73 |
|
---|
| 74 | inline D3DXVECTOR2& D3DXVECTOR2::operator /= (FLOAT f)
|
---|
| 75 | {
|
---|
| 76 | x /= f;
|
---|
| 77 | y /= f;
|
---|
| 78 | return *this;
|
---|
| 79 | }
|
---|
| 80 |
|
---|
| 81 | inline D3DXVECTOR2 D3DXVECTOR2::operator + () const
|
---|
| 82 | {
|
---|
| 83 | return *this;
|
---|
| 84 | }
|
---|
| 85 |
|
---|
| 86 | inline D3DXVECTOR2 D3DXVECTOR2::operator - () const
|
---|
| 87 | {
|
---|
| 88 | return D3DXVECTOR2(-x, -y);
|
---|
| 89 | }
|
---|
| 90 |
|
---|
| 91 | inline D3DXVECTOR2 D3DXVECTOR2::operator + (const D3DXVECTOR2& v) const
|
---|
| 92 | {
|
---|
| 93 | return D3DXVECTOR2(x + v.x, y + v.y);
|
---|
| 94 | }
|
---|
| 95 |
|
---|
| 96 | inline D3DXVECTOR2 D3DXVECTOR2::operator - (const D3DXVECTOR2& v) const
|
---|
| 97 | {
|
---|
| 98 | return D3DXVECTOR2(x - v.x, y - v.y);
|
---|
| 99 | }
|
---|
| 100 |
|
---|
| 101 | inline D3DXVECTOR2 D3DXVECTOR2::operator * (FLOAT f) const
|
---|
| 102 | {
|
---|
| 103 | return D3DXVECTOR2(x * f, y * f);
|
---|
| 104 | }
|
---|
| 105 |
|
---|
| 106 | inline D3DXVECTOR2 D3DXVECTOR2::operator / (FLOAT f) const
|
---|
| 107 | {
|
---|
| 108 | return D3DXVECTOR2(x / f, y / f);
|
---|
| 109 | }
|
---|
| 110 |
|
---|
| 111 | inline D3DXVECTOR2 operator * (FLOAT f, const D3DXVECTOR2& v)
|
---|
| 112 | {
|
---|
| 113 | return D3DXVECTOR2(f * v.x, f * v.y);
|
---|
| 114 | }
|
---|
| 115 |
|
---|
| 116 | inline WINBOOL D3DXVECTOR2::operator == (const D3DXVECTOR2& v) const
|
---|
| 117 | {
|
---|
| 118 | return x == v.x && y == v.y;
|
---|
| 119 | }
|
---|
| 120 |
|
---|
| 121 | inline WINBOOL D3DXVECTOR2::operator != (const D3DXVECTOR2& v) const
|
---|
| 122 | {
|
---|
| 123 | return x != v.x || y != v.y;
|
---|
| 124 | }
|
---|
| 125 |
|
---|
| 126 | inline D3DXVECTOR3::D3DXVECTOR3()
|
---|
| 127 | {
|
---|
| 128 | }
|
---|
| 129 |
|
---|
| 130 | inline D3DXVECTOR3::D3DXVECTOR3(const FLOAT *pf)
|
---|
| 131 | {
|
---|
| 132 | if(!pf) return;
|
---|
| 133 | x = pf[0];
|
---|
| 134 | y = pf[1];
|
---|
| 135 | z = pf[2];
|
---|
| 136 | }
|
---|
| 137 |
|
---|
| 138 | inline D3DXVECTOR3::D3DXVECTOR3(const D3DVECTOR& v)
|
---|
| 139 | {
|
---|
| 140 | x = v.x;
|
---|
| 141 | y = v.y;
|
---|
| 142 | z = v.z;
|
---|
| 143 | }
|
---|
| 144 |
|
---|
| 145 | inline D3DXVECTOR3::D3DXVECTOR3(FLOAT fx, FLOAT fy, FLOAT fz)
|
---|
| 146 | {
|
---|
| 147 | x = fx;
|
---|
| 148 | y = fy;
|
---|
| 149 | z = fz;
|
---|
| 150 | }
|
---|
| 151 |
|
---|
| 152 | inline D3DXVECTOR3::operator FLOAT* ()
|
---|
| 153 | {
|
---|
| 154 | return (FLOAT*)&x;
|
---|
| 155 | }
|
---|
| 156 |
|
---|
| 157 | inline D3DXVECTOR3::operator const FLOAT* () const
|
---|
| 158 | {
|
---|
| 159 | return (const FLOAT*)&x;
|
---|
| 160 | }
|
---|
| 161 |
|
---|
| 162 | inline D3DXVECTOR3& D3DXVECTOR3::operator += (const D3DXVECTOR3& v)
|
---|
| 163 | {
|
---|
| 164 | x += v.x;
|
---|
| 165 | y += v.y;
|
---|
| 166 | z += v.z;
|
---|
| 167 | return *this;
|
---|
| 168 | }
|
---|
| 169 |
|
---|
| 170 | inline D3DXVECTOR3& D3DXVECTOR3::operator -= (const D3DXVECTOR3& v)
|
---|
| 171 | {
|
---|
| 172 | x -= v.x;
|
---|
| 173 | y -= v.y;
|
---|
| 174 | z -= v.z;
|
---|
| 175 | return *this;
|
---|
| 176 | }
|
---|
| 177 |
|
---|
| 178 | inline D3DXVECTOR3& D3DXVECTOR3::operator *= (FLOAT f)
|
---|
| 179 | {
|
---|
| 180 | x *= f;
|
---|
| 181 | y *= f;
|
---|
| 182 | z *= f;
|
---|
| 183 | return *this;
|
---|
| 184 | }
|
---|
| 185 |
|
---|
| 186 | inline D3DXVECTOR3& D3DXVECTOR3::operator /= (FLOAT f)
|
---|
| 187 | {
|
---|
| 188 | x /= f;
|
---|
| 189 | y /= f;
|
---|
| 190 | z /= f;
|
---|
| 191 | return *this;
|
---|
| 192 | }
|
---|
| 193 |
|
---|
| 194 | inline D3DXVECTOR3 D3DXVECTOR3::operator + () const
|
---|
| 195 | {
|
---|
| 196 | return *this;
|
---|
| 197 | }
|
---|
| 198 |
|
---|
| 199 | inline D3DXVECTOR3 D3DXVECTOR3::operator - () const
|
---|
| 200 | {
|
---|
| 201 | return D3DXVECTOR3(-x, -y, -z);
|
---|
| 202 | }
|
---|
| 203 |
|
---|
| 204 | inline D3DXVECTOR3 D3DXVECTOR3::operator + (const D3DXVECTOR3& v) const
|
---|
| 205 | {
|
---|
| 206 | return D3DXVECTOR3(x + v.x, y + v.y, z + v.z);
|
---|
| 207 | }
|
---|
| 208 |
|
---|
| 209 | inline D3DXVECTOR3 D3DXVECTOR3::operator - (const D3DXVECTOR3& v) const
|
---|
| 210 | {
|
---|
| 211 | return D3DXVECTOR3(x - v.x, y - v.y, z - v.z);
|
---|
| 212 | }
|
---|
| 213 |
|
---|
| 214 | inline D3DXVECTOR3 D3DXVECTOR3::operator * (FLOAT f) const
|
---|
| 215 | {
|
---|
| 216 | return D3DXVECTOR3(x * f, y * f, z * f);
|
---|
| 217 | }
|
---|
| 218 |
|
---|
| 219 | inline D3DXVECTOR3 D3DXVECTOR3::operator / (FLOAT f) const
|
---|
| 220 | {
|
---|
| 221 | return D3DXVECTOR3(x / f, y / f, z / f);
|
---|
| 222 | }
|
---|
| 223 |
|
---|
| 224 | inline D3DXVECTOR3 operator * (FLOAT f, const D3DXVECTOR3& v)
|
---|
| 225 | {
|
---|
| 226 | return D3DXVECTOR3(f * v.x, f * v.y, f * v.z);
|
---|
| 227 | }
|
---|
| 228 |
|
---|
| 229 | inline WINBOOL D3DXVECTOR3::operator == (const D3DXVECTOR3& v) const
|
---|
| 230 | {
|
---|
| 231 | return x == v.x && y == v.y && z == v.z;
|
---|
| 232 | }
|
---|
| 233 |
|
---|
| 234 | inline WINBOOL D3DXVECTOR3::operator != (const D3DXVECTOR3& v) const
|
---|
| 235 | {
|
---|
| 236 | return x != v.x || y != v.y || z != v.z;
|
---|
| 237 | }
|
---|
| 238 |
|
---|
| 239 | inline D3DXVECTOR4::D3DXVECTOR4()
|
---|
| 240 | {
|
---|
| 241 | }
|
---|
| 242 |
|
---|
| 243 | inline D3DXVECTOR4::D3DXVECTOR4(const FLOAT *pf)
|
---|
| 244 | {
|
---|
| 245 | if(!pf) return;
|
---|
| 246 | x = pf[0];
|
---|
| 247 | y = pf[1];
|
---|
| 248 | z = pf[2];
|
---|
| 249 | w = pf[3];
|
---|
| 250 | }
|
---|
| 251 |
|
---|
| 252 | inline D3DXVECTOR4::D3DXVECTOR4(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw)
|
---|
| 253 | {
|
---|
| 254 | x = fx;
|
---|
| 255 | y = fy;
|
---|
| 256 | z = fz;
|
---|
| 257 | w = fw;
|
---|
| 258 | }
|
---|
| 259 |
|
---|
| 260 | inline D3DXVECTOR4::operator FLOAT* ()
|
---|
| 261 | {
|
---|
| 262 | return (FLOAT*)&x;
|
---|
| 263 | }
|
---|
| 264 |
|
---|
| 265 | inline D3DXVECTOR4::operator const FLOAT* () const
|
---|
| 266 | {
|
---|
| 267 | return (const FLOAT*)&x;
|
---|
| 268 | }
|
---|
| 269 |
|
---|
| 270 | inline D3DXVECTOR4& D3DXVECTOR4::operator += (const D3DXVECTOR4& v)
|
---|
| 271 | {
|
---|
| 272 | x += v.x;
|
---|
| 273 | y += v.y;
|
---|
| 274 | z += v.z;
|
---|
| 275 | w += v.w;
|
---|
| 276 | return *this;
|
---|
| 277 | }
|
---|
| 278 |
|
---|
| 279 | inline D3DXVECTOR4& D3DXVECTOR4::operator -= (const D3DXVECTOR4& v)
|
---|
| 280 | {
|
---|
| 281 | x -= v.x;
|
---|
| 282 | y -= v.y;
|
---|
| 283 | z -= v.z;
|
---|
| 284 | w -= v.w;
|
---|
| 285 | return *this;
|
---|
| 286 | }
|
---|
| 287 |
|
---|
| 288 | inline D3DXVECTOR4& D3DXVECTOR4::operator *= (FLOAT f)
|
---|
| 289 | {
|
---|
| 290 | x *= f;
|
---|
| 291 | y *= f;
|
---|
| 292 | z *= f;
|
---|
| 293 | w *= f;
|
---|
| 294 | return *this;
|
---|
| 295 | }
|
---|
| 296 |
|
---|
| 297 | inline D3DXVECTOR4& D3DXVECTOR4::operator /= (FLOAT f)
|
---|
| 298 | {
|
---|
| 299 | x /= f;
|
---|
| 300 | y /= f;
|
---|
| 301 | z /= f;
|
---|
| 302 | w /= f;
|
---|
| 303 | return *this;
|
---|
| 304 | }
|
---|
| 305 |
|
---|
| 306 | inline D3DXVECTOR4 D3DXVECTOR4::operator + () const
|
---|
| 307 | {
|
---|
| 308 | return *this;
|
---|
| 309 | }
|
---|
| 310 |
|
---|
| 311 | inline D3DXVECTOR4 D3DXVECTOR4::operator - () const
|
---|
| 312 | {
|
---|
| 313 | return D3DXVECTOR4(-x, -y, -z, -w);
|
---|
| 314 | }
|
---|
| 315 |
|
---|
| 316 | inline D3DXVECTOR4 D3DXVECTOR4::operator + (const D3DXVECTOR4& v) const
|
---|
| 317 | {
|
---|
| 318 | return D3DXVECTOR4(x + v.x, y + v.y, z + v.z, w + v.w);
|
---|
| 319 | }
|
---|
| 320 |
|
---|
| 321 | inline D3DXVECTOR4 D3DXVECTOR4::operator - (const D3DXVECTOR4& v) const
|
---|
| 322 | {
|
---|
| 323 | return D3DXVECTOR4(x - v.x, y - v.y, z - v.z, w - v.w);
|
---|
| 324 | }
|
---|
| 325 |
|
---|
| 326 | inline D3DXVECTOR4 D3DXVECTOR4::operator * (FLOAT f) const
|
---|
| 327 | {
|
---|
| 328 | return D3DXVECTOR4(x * f, y * f, z * f, w * f);
|
---|
| 329 | }
|
---|
| 330 |
|
---|
| 331 | inline D3DXVECTOR4 D3DXVECTOR4::operator / (FLOAT f) const
|
---|
| 332 | {
|
---|
| 333 | return D3DXVECTOR4(x / f, y / f, z / f, w / f);
|
---|
| 334 | }
|
---|
| 335 |
|
---|
| 336 | inline D3DXVECTOR4 operator * (FLOAT f, const D3DXVECTOR4& v)
|
---|
| 337 | {
|
---|
| 338 | return D3DXVECTOR4(f * v.x, f * v.y, f * v.z, f * v.w);
|
---|
| 339 | }
|
---|
| 340 |
|
---|
| 341 | inline WINBOOL D3DXVECTOR4::operator == (const D3DXVECTOR4& v) const
|
---|
| 342 | {
|
---|
| 343 | return x == v.x && y == v.y && z == v.z && w == v.w;
|
---|
| 344 | }
|
---|
| 345 |
|
---|
| 346 | inline WINBOOL D3DXVECTOR4::operator != (const D3DXVECTOR4& v) const
|
---|
| 347 | {
|
---|
| 348 | return x != v.x || y != v.y || z != v.z || w != v.w;
|
---|
| 349 | }
|
---|
| 350 |
|
---|
| 351 | inline D3DXMATRIX::D3DXMATRIX()
|
---|
| 352 | {
|
---|
| 353 | }
|
---|
| 354 |
|
---|
| 355 | inline D3DXMATRIX::D3DXMATRIX(const FLOAT *pf)
|
---|
| 356 | {
|
---|
| 357 | if(!pf) return;
|
---|
| 358 | memcpy(&_11, pf, sizeof(D3DXMATRIX));
|
---|
| 359 | }
|
---|
| 360 |
|
---|
| 361 | inline D3DXMATRIX::D3DXMATRIX(const D3DMATRIX& mat)
|
---|
| 362 | {
|
---|
| 363 | memcpy(&_11, &mat, sizeof(D3DXMATRIX));
|
---|
| 364 | }
|
---|
| 365 |
|
---|
| 366 | inline D3DXMATRIX::D3DXMATRIX(FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14,
|
---|
| 367 | FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24,
|
---|
| 368 | FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34,
|
---|
| 369 | FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44)
|
---|
| 370 | {
|
---|
| 371 | _11 = f11; _12 = f12; _13 = f13; _14 = f14;
|
---|
| 372 | _21 = f21; _22 = f22; _23 = f23; _24 = f24;
|
---|
| 373 | _31 = f31; _32 = f32; _33 = f33; _34 = f34;
|
---|
| 374 | _41 = f41; _42 = f42; _43 = f43; _44 = f44;
|
---|
| 375 | }
|
---|
| 376 |
|
---|
| 377 | inline FLOAT& D3DXMATRIX::operator () (UINT row, UINT col)
|
---|
| 378 | {
|
---|
| 379 | return m[row][col];
|
---|
| 380 | }
|
---|
| 381 |
|
---|
| 382 | inline FLOAT D3DXMATRIX::operator () (UINT row, UINT col) const
|
---|
| 383 | {
|
---|
| 384 | return m[row][col];
|
---|
| 385 | }
|
---|
| 386 |
|
---|
| 387 | inline D3DXMATRIX::operator FLOAT* ()
|
---|
| 388 | {
|
---|
| 389 | return (FLOAT*)&_11;
|
---|
| 390 | }
|
---|
| 391 |
|
---|
| 392 | inline D3DXMATRIX::operator const FLOAT* () const
|
---|
| 393 | {
|
---|
| 394 | return (const FLOAT*)&_11;
|
---|
| 395 | }
|
---|
| 396 |
|
---|
| 397 | inline D3DXMATRIX& D3DXMATRIX::operator *= (const D3DXMATRIX& mat)
|
---|
| 398 | {
|
---|
| 399 | D3DXMatrixMultiply(this, this, &mat);
|
---|
| 400 | return *this;
|
---|
| 401 | }
|
---|
| 402 |
|
---|
| 403 | inline D3DXMATRIX& D3DXMATRIX::operator += (const D3DXMATRIX& mat)
|
---|
| 404 | {
|
---|
| 405 | _11 += mat._11; _12 += mat._12; _13 += mat._13; _14 += mat._14;
|
---|
| 406 | _21 += mat._21; _22 += mat._22; _23 += mat._23; _24 += mat._24;
|
---|
| 407 | _31 += mat._31; _32 += mat._32; _33 += mat._33; _34 += mat._34;
|
---|
| 408 | _41 += mat._41; _42 += mat._42; _43 += mat._43; _44 += mat._44;
|
---|
| 409 | return *this;
|
---|
| 410 | }
|
---|
| 411 |
|
---|
| 412 | inline D3DXMATRIX& D3DXMATRIX::operator -= (const D3DXMATRIX& mat)
|
---|
| 413 | {
|
---|
| 414 | _11 -= mat._11; _12 -= mat._12; _13 -= mat._13; _14 -= mat._14;
|
---|
| 415 | _21 -= mat._21; _22 -= mat._22; _23 -= mat._23; _24 -= mat._24;
|
---|
| 416 | _31 -= mat._31; _32 -= mat._32; _33 -= mat._33; _34 -= mat._34;
|
---|
| 417 | _41 -= mat._41; _42 -= mat._42; _43 -= mat._43; _44 -= mat._44;
|
---|
| 418 | return *this;
|
---|
| 419 | }
|
---|
| 420 |
|
---|
| 421 | inline D3DXMATRIX& D3DXMATRIX::operator *= (FLOAT f)
|
---|
| 422 | {
|
---|
| 423 | _11 *= f; _12 *= f; _13 *= f; _14 *= f;
|
---|
| 424 | _21 *= f; _22 *= f; _23 *= f; _24 *= f;
|
---|
| 425 | _31 *= f; _32 *= f; _33 *= f; _34 *= f;
|
---|
| 426 | _41 *= f; _42 *= f; _43 *= f; _44 *= f;
|
---|
| 427 | return *this;
|
---|
| 428 | }
|
---|
| 429 |
|
---|
| 430 | inline D3DXMATRIX& D3DXMATRIX::operator /= (FLOAT f)
|
---|
| 431 | {
|
---|
| 432 | FLOAT inv = 1.0f / f;
|
---|
| 433 | _11 *= inv; _12 *= inv; _13 *= inv; _14 *= inv;
|
---|
| 434 | _21 *= inv; _22 *= inv; _23 *= inv; _24 *= inv;
|
---|
| 435 | _31 *= inv; _32 *= inv; _33 *= inv; _34 *= inv;
|
---|
| 436 | _41 *= inv; _42 *= inv; _43 *= inv; _44 *= inv;
|
---|
| 437 | return *this;
|
---|
| 438 | }
|
---|
| 439 |
|
---|
| 440 | inline D3DXMATRIX D3DXMATRIX::operator + () const
|
---|
| 441 | {
|
---|
| 442 | return *this;
|
---|
| 443 | }
|
---|
| 444 |
|
---|
| 445 | inline D3DXMATRIX D3DXMATRIX::operator - () const
|
---|
| 446 | {
|
---|
| 447 | return D3DXMATRIX(-_11, -_12, -_13, -_14,
|
---|
| 448 | -_21, -_22, -_23, -_24,
|
---|
| 449 | -_31, -_32, -_33, -_34,
|
---|
| 450 | -_41, -_42, -_43, -_44);
|
---|
| 451 | }
|
---|
| 452 |
|
---|
| 453 | inline D3DXMATRIX D3DXMATRIX::operator * (const D3DXMATRIX& mat) const
|
---|
| 454 | {
|
---|
| 455 | D3DXMATRIX buf;
|
---|
| 456 | D3DXMatrixMultiply(&buf, this, &mat);
|
---|
| 457 | return buf;
|
---|
| 458 | }
|
---|
| 459 |
|
---|
| 460 | inline D3DXMATRIX D3DXMATRIX::operator + (const D3DXMATRIX& mat) const
|
---|
| 461 | {
|
---|
| 462 | return D3DXMATRIX(_11 + mat._11, _12 + mat._12, _13 + mat._13, _14 + mat._14,
|
---|
| 463 | _21 + mat._21, _22 + mat._22, _23 + mat._23, _24 + mat._24,
|
---|
| 464 | _31 + mat._31, _32 + mat._32, _33 + mat._33, _34 + mat._34,
|
---|
| 465 | _41 + mat._41, _42 + mat._42, _43 + mat._43, _44 + mat._44);
|
---|
| 466 | }
|
---|
| 467 |
|
---|
| 468 | inline D3DXMATRIX D3DXMATRIX::operator - (const D3DXMATRIX& mat) const
|
---|
| 469 | {
|
---|
| 470 | return D3DXMATRIX(_11 - mat._11, _12 - mat._12, _13 - mat._13, _14 - mat._14,
|
---|
| 471 | _21 - mat._21, _22 - mat._22, _23 - mat._23, _24 - mat._24,
|
---|
| 472 | _31 - mat._31, _32 - mat._32, _33 - mat._33, _34 - mat._34,
|
---|
| 473 | _41 - mat._41, _42 - mat._42, _43 - mat._43, _44 - mat._44);
|
---|
| 474 | }
|
---|
| 475 |
|
---|
| 476 | inline D3DXMATRIX D3DXMATRIX::operator * (FLOAT f) const
|
---|
| 477 | {
|
---|
| 478 | return D3DXMATRIX(_11 * f, _12 * f, _13 * f, _14 * f,
|
---|
| 479 | _21 * f, _22 * f, _23 * f, _24 * f,
|
---|
| 480 | _31 * f, _32 * f, _33 * f, _34 * f,
|
---|
| 481 | _41 * f, _42 * f, _43 * f, _44 * f);
|
---|
| 482 | }
|
---|
| 483 |
|
---|
| 484 | inline D3DXMATRIX D3DXMATRIX::operator / (FLOAT f) const
|
---|
| 485 | {
|
---|
| 486 | FLOAT inv = 1.0f / f;
|
---|
| 487 | return D3DXMATRIX(_11 * inv, _12 * inv, _13 * inv, _14 * inv,
|
---|
| 488 | _21 * inv, _22 * inv, _23 * inv, _24 * inv,
|
---|
| 489 | _31 * inv, _32 * inv, _33 * inv, _34 * inv,
|
---|
| 490 | _41 * inv, _42 * inv, _43 * inv, _44 * inv);
|
---|
| 491 | }
|
---|
| 492 |
|
---|
| 493 | inline D3DXMATRIX operator * (FLOAT f, const D3DXMATRIX& mat)
|
---|
| 494 | {
|
---|
| 495 | return D3DXMATRIX(f * mat._11, f * mat._12, f * mat._13, f * mat._14,
|
---|
| 496 | f * mat._21, f * mat._22, f * mat._23, f * mat._24,
|
---|
| 497 | f * mat._31, f * mat._32, f * mat._33, f * mat._34,
|
---|
| 498 | f * mat._41, f * mat._42, f * mat._43, f * mat._44);
|
---|
| 499 | }
|
---|
| 500 |
|
---|
| 501 | inline WINBOOL D3DXMATRIX::operator == (const D3DXMATRIX& mat) const
|
---|
| 502 | {
|
---|
| 503 | return (memcmp(this, &mat, sizeof(D3DXMATRIX)) == 0);
|
---|
| 504 | }
|
---|
| 505 |
|
---|
| 506 | inline WINBOOL D3DXMATRIX::operator != (const D3DXMATRIX& mat) const
|
---|
| 507 | {
|
---|
| 508 | return (memcmp(this, &mat, sizeof(D3DXMATRIX)) != 0);
|
---|
| 509 | }
|
---|
| 510 |
|
---|
| 511 | inline D3DXQUATERNION::D3DXQUATERNION()
|
---|
| 512 | {
|
---|
| 513 | }
|
---|
| 514 |
|
---|
| 515 | inline D3DXQUATERNION::D3DXQUATERNION(const FLOAT *pf)
|
---|
| 516 | {
|
---|
| 517 | if(!pf) return;
|
---|
| 518 | x = pf[0];
|
---|
| 519 | y = pf[1];
|
---|
| 520 | z = pf[2];
|
---|
| 521 | w = pf[3];
|
---|
| 522 | }
|
---|
| 523 |
|
---|
| 524 | inline D3DXQUATERNION::D3DXQUATERNION(FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw)
|
---|
| 525 | {
|
---|
| 526 | x = fx;
|
---|
| 527 | y = fy;
|
---|
| 528 | z = fz;
|
---|
| 529 | w = fw;
|
---|
| 530 | }
|
---|
| 531 |
|
---|
| 532 | inline D3DXQUATERNION::operator FLOAT* ()
|
---|
| 533 | {
|
---|
| 534 | return (FLOAT*)&x;
|
---|
| 535 | }
|
---|
| 536 |
|
---|
| 537 | inline D3DXQUATERNION::operator const FLOAT* () const
|
---|
| 538 | {
|
---|
| 539 | return (const FLOAT*)&x;
|
---|
| 540 | }
|
---|
| 541 |
|
---|
| 542 | inline D3DXQUATERNION& D3DXQUATERNION::operator += (const D3DXQUATERNION& quat)
|
---|
| 543 | {
|
---|
| 544 | x += quat.x;
|
---|
| 545 | y += quat.y;
|
---|
| 546 | z += quat.z;
|
---|
| 547 | w += quat.w;
|
---|
| 548 | return *this;
|
---|
| 549 | }
|
---|
| 550 |
|
---|
| 551 | inline D3DXQUATERNION& D3DXQUATERNION::operator -= (const D3DXQUATERNION& quat)
|
---|
| 552 | {
|
---|
| 553 | x -= quat.x;
|
---|
| 554 | y -= quat.y;
|
---|
| 555 | z -= quat.z;
|
---|
| 556 | w -= quat.w;
|
---|
| 557 | return *this;
|
---|
| 558 | }
|
---|
| 559 |
|
---|
| 560 | inline D3DXQUATERNION& D3DXQUATERNION::operator *= (const D3DXQUATERNION& quat)
|
---|
| 561 | {
|
---|
| 562 | D3DXQuaternionMultiply(this, this, &quat);
|
---|
| 563 | return *this;
|
---|
| 564 | }
|
---|
| 565 |
|
---|
| 566 | inline D3DXQUATERNION& D3DXQUATERNION::operator *= (FLOAT f)
|
---|
| 567 | {
|
---|
| 568 | x *= f;
|
---|
| 569 | y *= f;
|
---|
| 570 | z *= f;
|
---|
| 571 | w *= f;
|
---|
| 572 | return *this;
|
---|
| 573 | }
|
---|
| 574 |
|
---|
| 575 | inline D3DXQUATERNION& D3DXQUATERNION::operator /= (FLOAT f)
|
---|
| 576 | {
|
---|
| 577 | FLOAT inv = 1.0f / f;
|
---|
| 578 | x *= inv;
|
---|
| 579 | y *= inv;
|
---|
| 580 | z *= inv;
|
---|
| 581 | w *= inv;
|
---|
| 582 | return *this;
|
---|
| 583 | }
|
---|
| 584 |
|
---|
| 585 | inline D3DXQUATERNION D3DXQUATERNION::operator + () const
|
---|
| 586 | {
|
---|
| 587 | return *this;
|
---|
| 588 | }
|
---|
| 589 |
|
---|
| 590 | inline D3DXQUATERNION D3DXQUATERNION::operator - () const
|
---|
| 591 | {
|
---|
| 592 | return D3DXQUATERNION(-x, -y, -z, -w);
|
---|
| 593 | }
|
---|
| 594 |
|
---|
| 595 | inline D3DXQUATERNION D3DXQUATERNION::operator + (const D3DXQUATERNION& quat) const
|
---|
| 596 | {
|
---|
| 597 | return D3DXQUATERNION(x + quat.x, y + quat.y, z + quat.z, w + quat.w);
|
---|
| 598 | }
|
---|
| 599 |
|
---|
| 600 | inline D3DXQUATERNION D3DXQUATERNION::operator - (const D3DXQUATERNION& quat) const
|
---|
| 601 | {
|
---|
| 602 | return D3DXQUATERNION(x - quat.x, y - quat.y, z - quat.z, w - quat.w);
|
---|
| 603 | }
|
---|
| 604 |
|
---|
| 605 | inline D3DXQUATERNION D3DXQUATERNION::operator * (const D3DXQUATERNION& quat) const
|
---|
| 606 | {
|
---|
| 607 | D3DXQUATERNION buf;
|
---|
| 608 | D3DXQuaternionMultiply(&buf, this, &quat);
|
---|
| 609 | return buf;
|
---|
| 610 | }
|
---|
| 611 |
|
---|
| 612 | inline D3DXQUATERNION D3DXQUATERNION::operator * (FLOAT f) const
|
---|
| 613 | {
|
---|
| 614 | return D3DXQUATERNION(x * f, y * f, z * f, w * f);
|
---|
| 615 | }
|
---|
| 616 |
|
---|
| 617 | inline D3DXQUATERNION D3DXQUATERNION::operator / (FLOAT f) const
|
---|
| 618 | {
|
---|
| 619 | FLOAT inv = 1.0f / f;
|
---|
| 620 | return D3DXQUATERNION(x * inv, y * inv, z * inv, w * inv);
|
---|
| 621 | }
|
---|
| 622 |
|
---|
| 623 | inline D3DXQUATERNION operator * (FLOAT f, const D3DXQUATERNION& quat)
|
---|
| 624 | {
|
---|
| 625 | return D3DXQUATERNION(f * quat.x, f * quat.y, f * quat.z, f * quat.w);
|
---|
| 626 | }
|
---|
| 627 |
|
---|
| 628 | inline WINBOOL D3DXQUATERNION::operator == (const D3DXQUATERNION& quat) const
|
---|
| 629 | {
|
---|
| 630 | return x == quat.x && y == quat.y && z == quat.z && w == quat.w;
|
---|
| 631 | }
|
---|
| 632 |
|
---|
| 633 | inline WINBOOL D3DXQUATERNION::operator != (const D3DXQUATERNION& quat) const
|
---|
| 634 | {
|
---|
| 635 | return x != quat.x || y != quat.y || z != quat.z || w != quat.w;
|
---|
| 636 | }
|
---|
| 637 |
|
---|
| 638 | inline D3DXPLANE::D3DXPLANE()
|
---|
| 639 | {
|
---|
| 640 | }
|
---|
| 641 |
|
---|
| 642 | inline D3DXPLANE::D3DXPLANE(const FLOAT *pf)
|
---|
| 643 | {
|
---|
| 644 | if(!pf) return;
|
---|
| 645 | a = pf[0];
|
---|
| 646 | b = pf[1];
|
---|
| 647 | c = pf[2];
|
---|
| 648 | d = pf[3];
|
---|
| 649 | }
|
---|
| 650 |
|
---|
| 651 | inline D3DXPLANE::D3DXPLANE(FLOAT fa, FLOAT fb, FLOAT fc, FLOAT fd)
|
---|
| 652 | {
|
---|
| 653 | a = fa;
|
---|
| 654 | b = fb;
|
---|
| 655 | c = fc;
|
---|
| 656 | d = fd;
|
---|
| 657 | }
|
---|
| 658 |
|
---|
| 659 | inline D3DXPLANE::operator FLOAT* ()
|
---|
| 660 | {
|
---|
| 661 | return (FLOAT*)&a;
|
---|
| 662 | }
|
---|
| 663 |
|
---|
| 664 | inline D3DXPLANE::operator const FLOAT* () const
|
---|
| 665 | {
|
---|
| 666 | return (const FLOAT*)&a;
|
---|
| 667 | }
|
---|
| 668 |
|
---|
| 669 | inline D3DXPLANE D3DXPLANE::operator + () const
|
---|
| 670 | {
|
---|
| 671 | return *this;
|
---|
| 672 | }
|
---|
| 673 |
|
---|
| 674 | inline D3DXPLANE D3DXPLANE::operator - () const
|
---|
| 675 | {
|
---|
| 676 | return D3DXPLANE(-a, -b, -c, -d);
|
---|
| 677 | }
|
---|
| 678 |
|
---|
| 679 | inline WINBOOL D3DXPLANE::operator == (const D3DXPLANE& pl) const
|
---|
| 680 | {
|
---|
| 681 | return a == pl.a && b == pl.b && c == pl.c && d == pl.d;
|
---|
| 682 | }
|
---|
| 683 |
|
---|
| 684 | inline WINBOOL D3DXPLANE::operator != (const D3DXPLANE& pl) const
|
---|
| 685 | {
|
---|
| 686 | return a != pl.a || b != pl.b || c != pl.c || d != pl.d;
|
---|
| 687 | }
|
---|
| 688 |
|
---|
| 689 | inline D3DXCOLOR::D3DXCOLOR()
|
---|
| 690 | {
|
---|
| 691 | }
|
---|
| 692 |
|
---|
| 693 | inline D3DXCOLOR::D3DXCOLOR(DWORD col)
|
---|
| 694 | {
|
---|
| 695 | const FLOAT f = 1.0f / 255.0f;
|
---|
| 696 | r = f * (FLOAT)(unsigned char)(col >> 16);
|
---|
| 697 | g = f * (FLOAT)(unsigned char)(col >> 8);
|
---|
| 698 | b = f * (FLOAT)(unsigned char)col;
|
---|
| 699 | a = f * (FLOAT)(unsigned char)(col >> 24);
|
---|
| 700 | }
|
---|
| 701 |
|
---|
| 702 | inline D3DXCOLOR::D3DXCOLOR(const FLOAT *pf)
|
---|
| 703 | {
|
---|
| 704 | if(!pf) return;
|
---|
| 705 | r = pf[0];
|
---|
| 706 | g = pf[1];
|
---|
| 707 | b = pf[2];
|
---|
| 708 | a = pf[3];
|
---|
| 709 | }
|
---|
| 710 |
|
---|
| 711 | inline D3DXCOLOR::D3DXCOLOR(const D3DCOLORVALUE& col)
|
---|
| 712 | {
|
---|
| 713 | r = col.r;
|
---|
| 714 | g = col.g;
|
---|
| 715 | b = col.b;
|
---|
| 716 | a = col.a;
|
---|
| 717 | }
|
---|
| 718 |
|
---|
| 719 | inline D3DXCOLOR::D3DXCOLOR(FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa)
|
---|
| 720 | {
|
---|
| 721 | r = fr;
|
---|
| 722 | g = fg;
|
---|
| 723 | b = fb;
|
---|
| 724 | a = fa;
|
---|
| 725 | }
|
---|
| 726 |
|
---|
| 727 | inline D3DXCOLOR::operator DWORD () const
|
---|
| 728 | {
|
---|
| 729 | DWORD _r = r >= 1.0f ? 0xff : r <= 0.0f ? 0x00 : (DWORD)(r * 255.0f + 0.5f);
|
---|
| 730 | DWORD _g = g >= 1.0f ? 0xff : g <= 0.0f ? 0x00 : (DWORD)(g * 255.0f + 0.5f);
|
---|
| 731 | DWORD _b = b >= 1.0f ? 0xff : b <= 0.0f ? 0x00 : (DWORD)(b * 255.0f + 0.5f);
|
---|
| 732 | DWORD _a = a >= 1.0f ? 0xff : a <= 0.0f ? 0x00 : (DWORD)(a * 255.0f + 0.5f);
|
---|
| 733 |
|
---|
| 734 | return (_a << 24) | (_r << 16) | (_g << 8) | _b;
|
---|
| 735 | }
|
---|
| 736 |
|
---|
| 737 | inline D3DXCOLOR::operator FLOAT * ()
|
---|
| 738 | {
|
---|
| 739 | return (FLOAT*)&r;
|
---|
| 740 | }
|
---|
| 741 |
|
---|
| 742 | inline D3DXCOLOR::operator const FLOAT * () const
|
---|
| 743 | {
|
---|
| 744 | return (const FLOAT*)&r;
|
---|
| 745 | }
|
---|
| 746 |
|
---|
| 747 | inline D3DXCOLOR::operator D3DCOLORVALUE * ()
|
---|
| 748 | {
|
---|
| 749 | return (D3DCOLORVALUE*)&r;
|
---|
| 750 | }
|
---|
| 751 |
|
---|
| 752 | inline D3DXCOLOR::operator const D3DCOLORVALUE * () const
|
---|
| 753 | {
|
---|
| 754 | return (const D3DCOLORVALUE*)&r;
|
---|
| 755 | }
|
---|
| 756 |
|
---|
| 757 | inline D3DXCOLOR::operator D3DCOLORVALUE& ()
|
---|
| 758 | {
|
---|
| 759 | return *((D3DCOLORVALUE*)&r);
|
---|
| 760 | }
|
---|
| 761 |
|
---|
| 762 | inline D3DXCOLOR::operator const D3DCOLORVALUE& () const
|
---|
| 763 | {
|
---|
| 764 | return *((const D3DCOLORVALUE*)&r);
|
---|
| 765 | }
|
---|
| 766 |
|
---|
| 767 | inline D3DXCOLOR& D3DXCOLOR::operator += (const D3DXCOLOR& col)
|
---|
| 768 | {
|
---|
| 769 | r += col.r;
|
---|
| 770 | g += col.g;
|
---|
| 771 | b += col.b;
|
---|
| 772 | a += col.a;
|
---|
| 773 | return *this;
|
---|
| 774 | }
|
---|
| 775 |
|
---|
| 776 | inline D3DXCOLOR& D3DXCOLOR::operator -= (const D3DXCOLOR& col)
|
---|
| 777 | {
|
---|
| 778 | r -= col.r;
|
---|
| 779 | g -= col.g;
|
---|
| 780 | b -= col.b;
|
---|
| 781 | a -= col.a;
|
---|
| 782 | return *this;
|
---|
| 783 | }
|
---|
| 784 |
|
---|
| 785 | inline D3DXCOLOR& D3DXCOLOR::operator *= (FLOAT f)
|
---|
| 786 | {
|
---|
| 787 | r *= f;
|
---|
| 788 | g *= f;
|
---|
| 789 | b *= f;
|
---|
| 790 | a *= f;
|
---|
| 791 | return *this;
|
---|
| 792 | }
|
---|
| 793 |
|
---|
| 794 | inline D3DXCOLOR& D3DXCOLOR::operator /= (FLOAT f)
|
---|
| 795 | {
|
---|
| 796 | FLOAT inv = 1.0f / f;
|
---|
| 797 | r *= inv;
|
---|
| 798 | g *= inv;
|
---|
| 799 | b *= inv;
|
---|
| 800 | a *= inv;
|
---|
| 801 | return *this;
|
---|
| 802 | }
|
---|
| 803 |
|
---|
| 804 | inline D3DXCOLOR D3DXCOLOR::operator + () const
|
---|
| 805 | {
|
---|
| 806 | return *this;
|
---|
| 807 | }
|
---|
| 808 |
|
---|
| 809 | inline D3DXCOLOR D3DXCOLOR::operator - () const
|
---|
| 810 | {
|
---|
| 811 | return D3DXCOLOR(-r, -g, -b, -a);
|
---|
| 812 | }
|
---|
| 813 |
|
---|
| 814 | inline D3DXCOLOR D3DXCOLOR::operator + (const D3DXCOLOR& col) const
|
---|
| 815 | {
|
---|
| 816 | return D3DXCOLOR(r + col.r, g + col.g, b + col.b, a + col.a);
|
---|
| 817 | }
|
---|
| 818 |
|
---|
| 819 | inline D3DXCOLOR D3DXCOLOR::operator - (const D3DXCOLOR& col) const
|
---|
| 820 | {
|
---|
| 821 | return D3DXCOLOR(r - col.r, g - col.g, b - col.b, a - col.a);
|
---|
| 822 | }
|
---|
| 823 |
|
---|
| 824 | inline D3DXCOLOR D3DXCOLOR::operator * (FLOAT f) const
|
---|
| 825 | {
|
---|
| 826 | return D3DXCOLOR(r * f, g * f, b * f, a * f);
|
---|
| 827 | }
|
---|
| 828 |
|
---|
| 829 | inline D3DXCOLOR D3DXCOLOR::operator / (FLOAT f) const
|
---|
| 830 | {
|
---|
| 831 | FLOAT inv = 1.0f / f;
|
---|
| 832 | return D3DXCOLOR(r * inv, g * inv, b * inv, a * inv);
|
---|
| 833 | }
|
---|
| 834 |
|
---|
| 835 | inline D3DXCOLOR operator * (FLOAT f, const D3DXCOLOR& col)
|
---|
| 836 | {
|
---|
| 837 | return D3DXCOLOR(f * col.r, f * col.g, f * col.b, f * col.a);
|
---|
| 838 | }
|
---|
| 839 |
|
---|
| 840 | inline WINBOOL D3DXCOLOR::operator == (const D3DXCOLOR& col) const
|
---|
| 841 | {
|
---|
| 842 | return r == col.r && g == col.g && b == col.b && a == col.a;
|
---|
| 843 | }
|
---|
| 844 |
|
---|
| 845 | inline WINBOOL D3DXCOLOR::operator != (const D3DXCOLOR& col) const
|
---|
| 846 | {
|
---|
| 847 | return r != col.r || g != col.g || b != col.b || a != col.a;
|
---|
| 848 | }
|
---|
| 849 |
|
---|
| 850 | inline D3DXFLOAT16::D3DXFLOAT16()
|
---|
| 851 | {
|
---|
| 852 | }
|
---|
| 853 |
|
---|
| 854 | inline D3DXFLOAT16::D3DXFLOAT16(FLOAT f)
|
---|
| 855 | {
|
---|
| 856 | D3DXFloat32To16Array(this, &f, 1);
|
---|
| 857 | }
|
---|
| 858 |
|
---|
| 859 | inline D3DXFLOAT16::D3DXFLOAT16(const D3DXFLOAT16 &f)
|
---|
| 860 | {
|
---|
| 861 | value = f.value;
|
---|
| 862 | }
|
---|
| 863 |
|
---|
| 864 | inline D3DXFLOAT16::operator FLOAT ()
|
---|
| 865 | {
|
---|
| 866 | FLOAT f;
|
---|
| 867 | D3DXFloat16To32Array(&f, this, 1);
|
---|
| 868 | return f;
|
---|
| 869 | }
|
---|
| 870 |
|
---|
| 871 | inline WINBOOL D3DXFLOAT16::operator == (const D3DXFLOAT16 &f) const
|
---|
| 872 | {
|
---|
| 873 | return value == f.value;
|
---|
| 874 | }
|
---|
| 875 |
|
---|
| 876 | inline WINBOOL D3DXFLOAT16::operator != (const D3DXFLOAT16 &f) const
|
---|
| 877 | {
|
---|
| 878 | return value != f.value;
|
---|
| 879 | }
|
---|
| 880 |
|
---|
| 881 | #endif /* __cplusplus */
|
---|
| 882 |
|
---|
| 883 | /*_______________D3DXCOLOR_____________________*/
|
---|
| 884 |
|
---|
| 885 | static inline D3DXCOLOR* D3DXColorAdd(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2)
|
---|
| 886 | {
|
---|
| 887 | if ( !pout || !pc1 || !pc2 ) return NULL;
|
---|
| 888 | pout->r = (pc1->r) + (pc2->r);
|
---|
| 889 | pout->g = (pc1->g) + (pc2->g);
|
---|
| 890 | pout->b = (pc1->b) + (pc2->b);
|
---|
| 891 | pout->a = (pc1->a) + (pc2->a);
|
---|
| 892 | return pout;
|
---|
| 893 | }
|
---|
| 894 |
|
---|
| 895 | static inline D3DXCOLOR* D3DXColorLerp(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2, FLOAT s)
|
---|
| 896 | {
|
---|
| 897 | if ( !pout || !pc1 || !pc2 ) return NULL;
|
---|
| 898 | pout->r = (1-s) * (pc1->r) + s *(pc2->r);
|
---|
| 899 | pout->g = (1-s) * (pc1->g) + s *(pc2->g);
|
---|
| 900 | pout->b = (1-s) * (pc1->b) + s *(pc2->b);
|
---|
| 901 | pout->a = (1-s) * (pc1->a) + s *(pc2->a);
|
---|
| 902 | return pout;
|
---|
| 903 | }
|
---|
| 904 |
|
---|
| 905 | static inline D3DXCOLOR* D3DXColorModulate(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2)
|
---|
| 906 | {
|
---|
| 907 | if ( !pout || !pc1 || !pc2 ) return NULL;
|
---|
| 908 | pout->r = (pc1->r) * (pc2->r);
|
---|
| 909 | pout->g = (pc1->g) * (pc2->g);
|
---|
| 910 | pout->b = (pc1->b) * (pc2->b);
|
---|
| 911 | pout->a = (pc1->a) * (pc2->a);
|
---|
| 912 | return pout;
|
---|
| 913 | }
|
---|
| 914 |
|
---|
| 915 | static inline D3DXCOLOR* D3DXColorNegative(D3DXCOLOR *pout, const D3DXCOLOR *pc)
|
---|
| 916 | {
|
---|
| 917 | if ( !pout || !pc ) return NULL;
|
---|
| 918 | pout->r = 1.0f - pc->r;
|
---|
| 919 | pout->g = 1.0f - pc->g;
|
---|
| 920 | pout->b = 1.0f - pc->b;
|
---|
| 921 | pout->a = pc->a;
|
---|
| 922 | return pout;
|
---|
| 923 | }
|
---|
| 924 |
|
---|
| 925 | static inline D3DXCOLOR* D3DXColorScale(D3DXCOLOR *pout, const D3DXCOLOR *pc, FLOAT s)
|
---|
| 926 | {
|
---|
| 927 | if ( !pout || !pc ) return NULL;
|
---|
| 928 | pout->r = s* (pc->r);
|
---|
| 929 | pout->g = s* (pc->g);
|
---|
| 930 | pout->b = s* (pc->b);
|
---|
| 931 | pout->a = s* (pc->a);
|
---|
| 932 | return pout;
|
---|
| 933 | }
|
---|
| 934 |
|
---|
| 935 | static inline D3DXCOLOR* D3DXColorSubtract(D3DXCOLOR *pout, const D3DXCOLOR *pc1, const D3DXCOLOR *pc2)
|
---|
| 936 | {
|
---|
| 937 | if ( !pout || !pc1 || !pc2 ) return NULL;
|
---|
| 938 | pout->r = (pc1->r) - (pc2->r);
|
---|
| 939 | pout->g = (pc1->g) - (pc2->g);
|
---|
| 940 | pout->b = (pc1->b) - (pc2->b);
|
---|
| 941 | pout->a = (pc1->a) - (pc2->a);
|
---|
| 942 | return pout;
|
---|
| 943 | }
|
---|
| 944 |
|
---|
| 945 | /*_______________D3DXVECTOR2________________________*/
|
---|
| 946 |
|
---|
| 947 | static inline D3DXVECTOR2* D3DXVec2Add(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
|
---|
| 948 | {
|
---|
| 949 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 950 | pout->x = pv1->x + pv2->x;
|
---|
| 951 | pout->y = pv1->y + pv2->y;
|
---|
| 952 | return pout;
|
---|
| 953 | }
|
---|
| 954 |
|
---|
| 955 | static inline FLOAT D3DXVec2CCW(const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
|
---|
| 956 | {
|
---|
| 957 | if ( !pv1 || !pv2) return 0.0f;
|
---|
| 958 | return ( (pv1->x) * (pv2->y) - (pv1->y) * (pv2->x) );
|
---|
| 959 | }
|
---|
| 960 |
|
---|
| 961 | static inline FLOAT D3DXVec2Dot(const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
|
---|
| 962 | {
|
---|
| 963 | if ( !pv1 || !pv2) return 0.0f;
|
---|
| 964 | return ( (pv1->x * pv2->x + pv1->y * pv2->y) );
|
---|
| 965 | }
|
---|
| 966 |
|
---|
| 967 | static inline FLOAT D3DXVec2Length(const D3DXVECTOR2 *pv)
|
---|
| 968 | {
|
---|
| 969 | if (!pv) return 0.0f;
|
---|
| 970 | return sqrtf( pv->x * pv->x + pv->y * pv->y );
|
---|
| 971 | }
|
---|
| 972 |
|
---|
| 973 | static inline FLOAT D3DXVec2LengthSq(const D3DXVECTOR2 *pv)
|
---|
| 974 | {
|
---|
| 975 | if (!pv) return 0.0f;
|
---|
| 976 | return( (pv->x) * (pv->x) + (pv->y) * (pv->y) );
|
---|
| 977 | }
|
---|
| 978 |
|
---|
| 979 | static inline D3DXVECTOR2* D3DXVec2Lerp(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2, FLOAT s)
|
---|
| 980 | {
|
---|
| 981 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 982 | pout->x = (1-s) * (pv1->x) + s * (pv2->x);
|
---|
| 983 | pout->y = (1-s) * (pv1->y) + s * (pv2->y);
|
---|
| 984 | return pout;
|
---|
| 985 | }
|
---|
| 986 |
|
---|
| 987 | static inline D3DXVECTOR2* D3DXVec2Maximize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
|
---|
| 988 | {
|
---|
| 989 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 990 | pout->x = pv1->x > pv2->x ? pv1->x : pv2->x;
|
---|
| 991 | pout->y = pv1->y > pv2->y ? pv1->y : pv2->y;
|
---|
| 992 | return pout;
|
---|
| 993 | }
|
---|
| 994 |
|
---|
| 995 | static inline D3DXVECTOR2* D3DXVec2Minimize(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
|
---|
| 996 | {
|
---|
| 997 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 998 | pout->x = pv1->x < pv2->x ? pv1->x : pv2->x;
|
---|
| 999 | pout->y = pv1->y < pv2->y ? pv1->y : pv2->y;
|
---|
| 1000 | return pout;
|
---|
| 1001 | }
|
---|
| 1002 |
|
---|
| 1003 | static inline D3DXVECTOR2* D3DXVec2Scale(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv, FLOAT s)
|
---|
| 1004 | {
|
---|
| 1005 | if ( !pout || !pv) return NULL;
|
---|
| 1006 | pout->x = s * (pv->x);
|
---|
| 1007 | pout->y = s * (pv->y);
|
---|
| 1008 | return pout;
|
---|
| 1009 | }
|
---|
| 1010 |
|
---|
| 1011 | static inline D3DXVECTOR2* D3DXVec2Subtract(D3DXVECTOR2 *pout, const D3DXVECTOR2 *pv1, const D3DXVECTOR2 *pv2)
|
---|
| 1012 | {
|
---|
| 1013 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 1014 | pout->x = pv1->x - pv2->x;
|
---|
| 1015 | pout->y = pv1->y - pv2->y;
|
---|
| 1016 | return pout;
|
---|
| 1017 | }
|
---|
| 1018 |
|
---|
| 1019 | /*__________________D3DXVECTOR3_______________________*/
|
---|
| 1020 |
|
---|
| 1021 | static inline D3DXVECTOR3* D3DXVec3Add(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
|
---|
| 1022 | {
|
---|
| 1023 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 1024 | pout->x = pv1->x + pv2->x;
|
---|
| 1025 | pout->y = pv1->y + pv2->y;
|
---|
| 1026 | pout->z = pv1->z + pv2->z;
|
---|
| 1027 | return pout;
|
---|
| 1028 | }
|
---|
| 1029 |
|
---|
| 1030 | static inline D3DXVECTOR3* D3DXVec3Cross(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
|
---|
| 1031 | {
|
---|
| 1032 | D3DXVECTOR3 temp;
|
---|
| 1033 |
|
---|
| 1034 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 1035 | temp.x = (pv1->y) * (pv2->z) - (pv1->z) * (pv2->y);
|
---|
| 1036 | temp.y = (pv1->z) * (pv2->x) - (pv1->x) * (pv2->z);
|
---|
| 1037 | temp.z = (pv1->x) * (pv2->y) - (pv1->y) * (pv2->x);
|
---|
| 1038 | *pout = temp;
|
---|
| 1039 | return pout;
|
---|
| 1040 | }
|
---|
| 1041 |
|
---|
| 1042 | static inline FLOAT D3DXVec3Dot(const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
|
---|
| 1043 | {
|
---|
| 1044 | if ( !pv1 || !pv2 ) return 0.0f;
|
---|
| 1045 | return (pv1->x) * (pv2->x) + (pv1->y) * (pv2->y) + (pv1->z) * (pv2->z);
|
---|
| 1046 | }
|
---|
| 1047 |
|
---|
| 1048 | static inline FLOAT D3DXVec3Length(const D3DXVECTOR3 *pv)
|
---|
| 1049 | {
|
---|
| 1050 | if (!pv) return 0.0f;
|
---|
| 1051 | return sqrtf( pv->x * pv->x + pv->y * pv->y + pv->z * pv->z );
|
---|
| 1052 | }
|
---|
| 1053 |
|
---|
| 1054 | static inline FLOAT D3DXVec3LengthSq(const D3DXVECTOR3 *pv)
|
---|
| 1055 | {
|
---|
| 1056 | if (!pv) return 0.0f;
|
---|
| 1057 | return (pv->x) * (pv->x) + (pv->y) * (pv->y) + (pv->z) * (pv->z);
|
---|
| 1058 | }
|
---|
| 1059 |
|
---|
| 1060 | static inline D3DXVECTOR3* D3DXVec3Lerp(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2, FLOAT s)
|
---|
| 1061 | {
|
---|
| 1062 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 1063 | pout->x = (1-s) * (pv1->x) + s * (pv2->x);
|
---|
| 1064 | pout->y = (1-s) * (pv1->y) + s * (pv2->y);
|
---|
| 1065 | pout->z = (1-s) * (pv1->z) + s * (pv2->z);
|
---|
| 1066 | return pout;
|
---|
| 1067 | }
|
---|
| 1068 |
|
---|
| 1069 | static inline D3DXVECTOR3* D3DXVec3Maximize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
|
---|
| 1070 | {
|
---|
| 1071 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 1072 | pout->x = pv1->x > pv2->x ? pv1->x : pv2->x;
|
---|
| 1073 | pout->y = pv1->y > pv2->y ? pv1->y : pv2->y;
|
---|
| 1074 | pout->z = pv1->z > pv2->z ? pv1->z : pv2->z;
|
---|
| 1075 | return pout;
|
---|
| 1076 | }
|
---|
| 1077 |
|
---|
| 1078 | static inline D3DXVECTOR3* D3DXVec3Minimize(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
|
---|
| 1079 | {
|
---|
| 1080 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 1081 | pout->x = pv1->x < pv2->x ? pv1->x : pv2->x;
|
---|
| 1082 | pout->y = pv1->y < pv2->y ? pv1->y : pv2->y;
|
---|
| 1083 | pout->z = pv1->z < pv2->z ? pv1->z : pv2->z;
|
---|
| 1084 | return pout;
|
---|
| 1085 | }
|
---|
| 1086 |
|
---|
| 1087 | static inline D3DXVECTOR3* D3DXVec3Scale(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv, FLOAT s)
|
---|
| 1088 | {
|
---|
| 1089 | if ( !pout || !pv) return NULL;
|
---|
| 1090 | pout->x = s * (pv->x);
|
---|
| 1091 | pout->y = s * (pv->y);
|
---|
| 1092 | pout->z = s * (pv->z);
|
---|
| 1093 | return pout;
|
---|
| 1094 | }
|
---|
| 1095 |
|
---|
| 1096 | static inline D3DXVECTOR3* D3DXVec3Subtract(D3DXVECTOR3 *pout, const D3DXVECTOR3 *pv1, const D3DXVECTOR3 *pv2)
|
---|
| 1097 | {
|
---|
| 1098 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 1099 | pout->x = pv1->x - pv2->x;
|
---|
| 1100 | pout->y = pv1->y - pv2->y;
|
---|
| 1101 | pout->z = pv1->z - pv2->z;
|
---|
| 1102 | return pout;
|
---|
| 1103 | }
|
---|
| 1104 | /*__________________D3DXVECTOR4_______________________*/
|
---|
| 1105 |
|
---|
| 1106 | static inline D3DXVECTOR4* D3DXVec4Add(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
|
---|
| 1107 | {
|
---|
| 1108 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 1109 | pout->x = pv1->x + pv2->x;
|
---|
| 1110 | pout->y = pv1->y + pv2->y;
|
---|
| 1111 | pout->z = pv1->z + pv2->z;
|
---|
| 1112 | pout->w = pv1->w + pv2->w;
|
---|
| 1113 | return pout;
|
---|
| 1114 | }
|
---|
| 1115 |
|
---|
| 1116 | static inline FLOAT D3DXVec4Dot(const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
|
---|
| 1117 | {
|
---|
| 1118 | if (!pv1 || !pv2 ) return 0.0f;
|
---|
| 1119 | return (pv1->x) * (pv2->x) + (pv1->y) * (pv2->y) + (pv1->z) * (pv2->z) + (pv1->w) * (pv2->w);
|
---|
| 1120 | }
|
---|
| 1121 |
|
---|
| 1122 | static inline FLOAT D3DXVec4Length(const D3DXVECTOR4 *pv)
|
---|
| 1123 | {
|
---|
| 1124 | if (!pv) return 0.0f;
|
---|
| 1125 | return sqrtf( pv->x * pv->x + pv->y * pv->y + pv->z * pv->z + pv->w * pv->w );
|
---|
| 1126 | }
|
---|
| 1127 |
|
---|
| 1128 | static inline FLOAT D3DXVec4LengthSq(const D3DXVECTOR4 *pv)
|
---|
| 1129 | {
|
---|
| 1130 | if (!pv) return 0.0f;
|
---|
| 1131 | return (pv->x) * (pv->x) + (pv->y) * (pv->y) + (pv->z) * (pv->z) + (pv->w) * (pv->w);
|
---|
| 1132 | }
|
---|
| 1133 |
|
---|
| 1134 | static inline D3DXVECTOR4* D3DXVec4Lerp(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2, FLOAT s)
|
---|
| 1135 | {
|
---|
| 1136 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 1137 | pout->x = (1-s) * (pv1->x) + s * (pv2->x);
|
---|
| 1138 | pout->y = (1-s) * (pv1->y) + s * (pv2->y);
|
---|
| 1139 | pout->z = (1-s) * (pv1->z) + s * (pv2->z);
|
---|
| 1140 | pout->w = (1-s) * (pv1->w) + s * (pv2->w);
|
---|
| 1141 | return pout;
|
---|
| 1142 | }
|
---|
| 1143 |
|
---|
| 1144 |
|
---|
| 1145 | static inline D3DXVECTOR4* D3DXVec4Maximize(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
|
---|
| 1146 | {
|
---|
| 1147 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 1148 | pout->x = pv1->x > pv2->x ? pv1->x : pv2->x;
|
---|
| 1149 | pout->y = pv1->y > pv2->y ? pv1->y : pv2->y;
|
---|
| 1150 | pout->z = pv1->z > pv2->z ? pv1->z : pv2->z;
|
---|
| 1151 | pout->w = pv1->w > pv2->w ? pv1->w : pv2->w;
|
---|
| 1152 | return pout;
|
---|
| 1153 | }
|
---|
| 1154 |
|
---|
| 1155 | static inline D3DXVECTOR4* D3DXVec4Minimize(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
|
---|
| 1156 | {
|
---|
| 1157 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 1158 | pout->x = pv1->x < pv2->x ? pv1->x : pv2->x;
|
---|
| 1159 | pout->y = pv1->y < pv2->y ? pv1->y : pv2->y;
|
---|
| 1160 | pout->z = pv1->z < pv2->z ? pv1->z : pv2->z;
|
---|
| 1161 | pout->w = pv1->w < pv2->w ? pv1->w : pv2->w;
|
---|
| 1162 | return pout;
|
---|
| 1163 | }
|
---|
| 1164 |
|
---|
| 1165 | static inline D3DXVECTOR4* D3DXVec4Scale(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv, FLOAT s)
|
---|
| 1166 | {
|
---|
| 1167 | if ( !pout || !pv) return NULL;
|
---|
| 1168 | pout->x = s * (pv->x);
|
---|
| 1169 | pout->y = s * (pv->y);
|
---|
| 1170 | pout->z = s * (pv->z);
|
---|
| 1171 | pout->w = s * (pv->w);
|
---|
| 1172 | return pout;
|
---|
| 1173 | }
|
---|
| 1174 |
|
---|
| 1175 | static inline D3DXVECTOR4* D3DXVec4Subtract(D3DXVECTOR4 *pout, const D3DXVECTOR4 *pv1, const D3DXVECTOR4 *pv2)
|
---|
| 1176 | {
|
---|
| 1177 | if ( !pout || !pv1 || !pv2) return NULL;
|
---|
| 1178 | pout->x = pv1->x - pv2->x;
|
---|
| 1179 | pout->y = pv1->y - pv2->y;
|
---|
| 1180 | pout->z = pv1->z - pv2->z;
|
---|
| 1181 | pout->w = pv1->w - pv2->w;
|
---|
| 1182 | return pout;
|
---|
| 1183 | }
|
---|
| 1184 |
|
---|
| 1185 | /*__________________D3DXMatrix____________________*/
|
---|
| 1186 | #ifdef NONAMELESSUNION
|
---|
| 1187 | # define D3DX_U(x) (x).u
|
---|
| 1188 | #else
|
---|
| 1189 | # define D3DX_U(x) (x)
|
---|
| 1190 | #endif
|
---|
| 1191 |
|
---|
| 1192 | static inline D3DXMATRIX* D3DXMatrixIdentity(D3DXMATRIX *pout)
|
---|
| 1193 | {
|
---|
| 1194 | if ( !pout ) return NULL;
|
---|
| 1195 | D3DX_U(*pout).m[0][1] = 0.0f;
|
---|
| 1196 | D3DX_U(*pout).m[0][2] = 0.0f;
|
---|
| 1197 | D3DX_U(*pout).m[0][3] = 0.0f;
|
---|
| 1198 | D3DX_U(*pout).m[1][0] = 0.0f;
|
---|
| 1199 | D3DX_U(*pout).m[1][2] = 0.0f;
|
---|
| 1200 | D3DX_U(*pout).m[1][3] = 0.0f;
|
---|
| 1201 | D3DX_U(*pout).m[2][0] = 0.0f;
|
---|
| 1202 | D3DX_U(*pout).m[2][1] = 0.0f;
|
---|
| 1203 | D3DX_U(*pout).m[2][3] = 0.0f;
|
---|
| 1204 | D3DX_U(*pout).m[3][0] = 0.0f;
|
---|
| 1205 | D3DX_U(*pout).m[3][1] = 0.0f;
|
---|
| 1206 | D3DX_U(*pout).m[3][2] = 0.0f;
|
---|
| 1207 | D3DX_U(*pout).m[0][0] = 1.0f;
|
---|
| 1208 | D3DX_U(*pout).m[1][1] = 1.0f;
|
---|
| 1209 | D3DX_U(*pout).m[2][2] = 1.0f;
|
---|
| 1210 | D3DX_U(*pout).m[3][3] = 1.0f;
|
---|
| 1211 | return pout;
|
---|
| 1212 | }
|
---|
| 1213 |
|
---|
| 1214 | static inline WINBOOL D3DXMatrixIsIdentity(D3DXMATRIX *pm)
|
---|
| 1215 | {
|
---|
| 1216 | int i,j;
|
---|
| 1217 | D3DXMATRIX testmatrix;
|
---|
| 1218 |
|
---|
| 1219 | if ( !pm ) return FALSE;
|
---|
| 1220 | D3DXMatrixIdentity(&testmatrix);
|
---|
| 1221 | for (i=0; i<4; i++)
|
---|
| 1222 | {
|
---|
| 1223 | for (j=0; j<4; j++)
|
---|
| 1224 | {
|
---|
| 1225 | if ( D3DX_U(*pm).m[i][j] != D3DX_U(testmatrix).m[i][j] ) return FALSE;
|
---|
| 1226 | }
|
---|
| 1227 | }
|
---|
| 1228 | return TRUE;
|
---|
| 1229 | }
|
---|
| 1230 | #undef D3DX_U
|
---|
| 1231 |
|
---|
| 1232 | /*__________________D3DXPLANE____________________*/
|
---|
| 1233 |
|
---|
| 1234 | static inline FLOAT D3DXPlaneDot(const D3DXPLANE *pp, const D3DXVECTOR4 *pv)
|
---|
| 1235 | {
|
---|
| 1236 | if ( !pp || !pv ) return 0.0f;
|
---|
| 1237 | return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) + (pp->d) * (pv->w) );
|
---|
| 1238 | }
|
---|
| 1239 |
|
---|
| 1240 | static inline FLOAT D3DXPlaneDotCoord(const D3DXPLANE *pp, const D3DXVECTOR4 *pv)
|
---|
| 1241 | {
|
---|
| 1242 | if ( !pp || !pv ) return 0.0f;
|
---|
| 1243 | return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) + (pp->d) );
|
---|
| 1244 | }
|
---|
| 1245 |
|
---|
| 1246 | static inline FLOAT D3DXPlaneDotNormal(const D3DXPLANE *pp, const D3DXVECTOR4 *pv)
|
---|
| 1247 | {
|
---|
| 1248 | if ( !pp || !pv ) return 0.0f;
|
---|
| 1249 | return ( (pp->a) * (pv->x) + (pp->b) * (pv->y) + (pp->c) * (pv->z) );
|
---|
| 1250 | }
|
---|
| 1251 |
|
---|
| 1252 | /*__________________D3DXQUATERNION____________________*/
|
---|
| 1253 |
|
---|
| 1254 | static inline D3DXQUATERNION* D3DXQuaternionConjugate(D3DXQUATERNION *pout, const D3DXQUATERNION *pq)
|
---|
| 1255 | {
|
---|
| 1256 | if ( !pout || !pq) return NULL;
|
---|
| 1257 | pout->x = -pq->x;
|
---|
| 1258 | pout->y = -pq->y;
|
---|
| 1259 | pout->z = -pq->z;
|
---|
| 1260 | pout->w = pq->w;
|
---|
| 1261 | return pout;
|
---|
| 1262 | }
|
---|
| 1263 |
|
---|
| 1264 | static inline FLOAT D3DXQuaternionDot(const D3DXQUATERNION *pq1, const D3DXQUATERNION *pq2)
|
---|
| 1265 | {
|
---|
| 1266 | if ( !pq1 || !pq2 ) return 0.0f;
|
---|
| 1267 | return (pq1->x) * (pq2->x) + (pq1->y) * (pq2->y) + (pq1->z) * (pq2->z) + (pq1->w) * (pq2->w);
|
---|
| 1268 | }
|
---|
| 1269 |
|
---|
| 1270 | static inline D3DXQUATERNION* D3DXQuaternionIdentity(D3DXQUATERNION *pout)
|
---|
| 1271 | {
|
---|
| 1272 | if ( !pout) return NULL;
|
---|
| 1273 | pout->x = 0.0f;
|
---|
| 1274 | pout->y = 0.0f;
|
---|
| 1275 | pout->z = 0.0f;
|
---|
| 1276 | pout->w = 1.0f;
|
---|
| 1277 | return pout;
|
---|
| 1278 | }
|
---|
| 1279 |
|
---|
| 1280 | static inline WINBOOL D3DXQuaternionIsIdentity(D3DXQUATERNION *pq)
|
---|
| 1281 | {
|
---|
| 1282 | if ( !pq) return FALSE;
|
---|
| 1283 | return ( (pq->x == 0.0f) && (pq->y == 0.0f) && (pq->z == 0.0f) && (pq->w == 1.0f) );
|
---|
| 1284 | }
|
---|
| 1285 |
|
---|
| 1286 | static inline FLOAT D3DXQuaternionLength(const D3DXQUATERNION *pq)
|
---|
| 1287 | {
|
---|
| 1288 | if (!pq) return 0.0f;
|
---|
| 1289 | return sqrtf( pq->x * pq->x + pq->y * pq->y + pq->z * pq->z + pq->w * pq->w );
|
---|
| 1290 | }
|
---|
| 1291 |
|
---|
| 1292 | static inline FLOAT D3DXQuaternionLengthSq(const D3DXQUATERNION *pq)
|
---|
| 1293 | {
|
---|
| 1294 | if (!pq) return 0.0f;
|
---|
| 1295 | return (pq->x) * (pq->x) + (pq->y) * (pq->y) + (pq->z) * (pq->z) + (pq->w) * (pq->w);
|
---|
| 1296 | }
|
---|
| 1297 |
|
---|
| 1298 | #endif
|
---|