- initial commit of Genesis3D 1.6
[genesis3d.git] / include / VEC3D.H
1 /****************************************************************************************/\r
2 /*  VEC3D.H                                                                             */\r
3 /*                                                                                      */\r
4 /*  Author:                                                                             */\r
5 /*  Description: 3D Vector interface                                                    */\r
6 /*                                                                                      */\r
7 /*  The contents of this file are subject to the Genesis3D Public License               */\r
8 /*  Version 1.01 (the "License"); you may not use this file except in                   */\r
9 /*  compliance with the License. You may obtain a copy of the License at                */\r
10 /*  http://www.genesis3d.com                                                            */\r
11 /*                                                                                      */\r
12 /*  Software distributed under the License is distributed on an "AS IS"                 */\r
13 /*  basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See                */\r
14 /*  the License for the specific language governing rights and limitations              */\r
15 /*  under the License.                                                                  */\r
16 /*                                                                                      */\r
17 /*  The Original Code is Genesis3D, released March 25, 1999.                            */\r
18 /*  Genesis3D Version 1.1 released November 15, 1999                                 */\r
19 /*  Copyright (C) 1999 WildTangent, Inc. All Rights Reserved           */\r
20 /*                                                                                      */\r
21 /****************************************************************************************/\r
22 #ifndef GE_VEC3D_H\r
23 #define GE_VEC3D_H\r
24 \r
25 #include "basetype.h"\r
26 \r
27 #ifdef __cplusplus\r
28 extern "C" {\r
29 #endif\r
30 \r
31 typedef struct\r
32 {\r
33         geFloat X, Y, Z;\r
34 } geVec3d;\r
35 \r
36 #ifndef NDEBUG\r
37 GENESISAPI      geFloat GENESISCC   geVec3d_GetElement(geVec3d *V, int Index);\r
38 #else\r
39         #define geVec3d_GetElement(Vector,Index)  (* ((&((Vector)->X)) +  (Index) ))\r
40 #endif\r
41 \r
42 GENESISAPI void GENESISCC               geVec3d_Set(geVec3d *V, geFloat X, geFloat Y, geFloat Z);\r
43 GENESISAPI void GENESISCC               geVec3d_Get(const geVec3d *V, geFloat *X, geFloat *Y, geFloat *Z);\r
44 \r
45 GENESISAPI geFloat GENESISCC    geVec3d_DotProduct(const geVec3d *V1, const geVec3d *V2);\r
46 GENESISAPI void GENESISCC               geVec3d_CrossProduct(const geVec3d *V1, const geVec3d *V2, geVec3d *VResult);\r
47 GENESISAPI geBoolean GENESISCC  geVec3d_Compare(const geVec3d *V1, const geVec3d *V2,geFloat tolarance);\r
48 GENESISAPI geFloat GENESISCC    geVec3d_Normalize(geVec3d *V1);\r
49 GENESISAPI geBoolean GENESISCC  geVec3d_IsNormalized(const geVec3d *V);\r
50 GENESISAPI void GENESISCC               geVec3d_Scale(const geVec3d *VSrc, geFloat Scale, geVec3d *VDst);\r
51 GENESISAPI geFloat GENESISCC    geVec3d_Length(const geVec3d *V1); \r
52 GENESISAPI geFloat GENESISCC    geVec3d_LengthSquared(const geVec3d *V1);\r
53 GENESISAPI void GENESISCC               geVec3d_Subtract(const geVec3d *V1, const geVec3d *V2, geVec3d *V1MinusV2);\r
54 GENESISAPI void GENESISCC               geVec3d_Add(const geVec3d *V1, const geVec3d *V2,  geVec3d *VSum);\r
55 GENESISAPI void GENESISCC               geVec3d_Copy(const geVec3d *Vsrc, geVec3d *Vdst);\r
56 GENESISAPI void GENESISCC               geVec3d_Clear(geVec3d *V);\r
57 GENESISAPI void GENESISCC               geVec3d_Inverse(geVec3d *V);\r
58 GENESISAPI void GENESISCC               geVec3d_MA(geVec3d *V1, geFloat Scale, const geVec3d *V2, geVec3d *V1PlusV2Scaled);\r
59 GENESISAPI void GENESISCC               geVec3d_AddScaled(const geVec3d *V1, const geVec3d *V2, geFloat Scale, geVec3d *V1PlusV2Scaled);\r
60 \r
61 GENESISAPI geFloat GENESISCC            geVec3d_DistanceBetween(const geVec3d *V1, const geVec3d *V2);  // returns length of V1-V2      \r
62 \r
63 GENESISAPI geBoolean GENESISCC geVec3d_IsValid(const geVec3d *V);\r
64 \r
65 #ifdef __cplusplus\r
66 }\r
67 #endif\r
68 \r
69 #endif\r
70 \r