2 * Copyright 2007 David Adam
3 * Copyright 2007 Vijay Kiran Kamuju
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.
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.
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
31 #include "wine/debug.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
36 LPD3DVECTOR WINAPI D3DRMVectorAdd(LPD3DVECTOR d, LPD3DVECTOR s1, LPD3DVECTOR s2)
44 /* Subtract Two Vectors */
45 LPD3DVECTOR WINAPI D3DRMVectorSubtract(LPD3DVECTOR d, LPD3DVECTOR s1, LPD3DVECTOR s2)
53 /* Cross Product of Two Vectors */
54 LPD3DVECTOR WINAPI D3DRMVectorCrossProduct(LPD3DVECTOR d, LPD3DVECTOR s1, LPD3DVECTOR s2)
56 d->x=s1->y * s2->z - s1->z * s2->y;
57 d->y=s1->z * s2->x - s1->x * s2->z;
58 d->z=s1->x * s2->y - s1->y * s2->x;
62 /* Dot Product of Two vectors */
63 D3DVALUE WINAPI D3DRMVectorDotProduct(LPD3DVECTOR s1, LPD3DVECTOR s2)
66 dot_product=s1->x * s2->x + s1->y * s2->y + s1->z * s2->z;
70 /* Norm of a vector */
71 D3DVALUE WINAPI D3DRMVectorModulus(LPD3DVECTOR v)
74 result=sqrt(v->x * v->x + v->y * v->y + v->z * v->z);
78 /* Normalize a vector. Returns (1,0,0) if INPUT is the NULL vector. */
79 LPD3DVECTOR WINAPI D3DRMVectorNormalize(LPD3DVECTOR u)
81 D3DVALUE modulus = D3DRMVectorModulus(u);
84 D3DRMVectorScale(u,u,1.0/modulus);
96 LPD3DVECTOR WINAPI D3DRMVectorScale(LPD3DVECTOR d, LPD3DVECTOR s, D3DVALUE factor)