00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef VEC3_H_INCLUDED
00027 #define VEC3_H_INCLUDED
00028
00029 #include <assert.h>
00030
00031 #ifndef kmScalar
00032 #define kmScalar float
00033 #endif
00034
00035 struct kmMat4;
00036
00037 typedef struct kmVec3 {
00038 kmScalar x;
00039 kmScalar y;
00040 kmScalar z;
00041 } kmVec3;
00042
00043 #ifdef __cplusplus
00044 extern "C" {
00045 #endif
00046
00047 kmVec3* kmVec3Fill(kmVec3* pOut, kmScalar x, kmScalar y, kmScalar z);
00048 kmScalar kmVec3Length(const kmVec3* pIn);
00049 kmScalar kmVec3LengthSq(const kmVec3* pIn);
00050 kmVec3* kmVec3Normalize(kmVec3* pOut, const kmVec3* pIn);
00051 kmVec3* kmVec3Cross(kmVec3* pOut, const kmVec3* pV1, const kmVec3* pV2);
00052 kmScalar kmVec3Dot(const kmVec3* pV1, const kmVec3* pV2);
00053 kmVec3* kmVec3Add(kmVec3* pOut, const kmVec3* pV1, const kmVec3* pV2);
00054 kmVec3* kmVec3Subtract(kmVec3* pOut, const kmVec3* pV1, const kmVec3* pV2);
00055 kmVec3* kmVec3Transform(kmVec3* pOut, const kmVec3* pV1, const struct kmMat4* pM);
00056 kmVec3* kmVec3TransformNormal(kmVec3* pOut, const kmVec3* pV, const struct kmMat4* pM);
00057 kmVec3* kmVec3TransformCoord(kmVec3* pOut, const kmVec3* pV, const struct kmMat4* pM);
00058 kmVec3* kmVec3Scale(kmVec3* pOut, const kmVec3* pIn, const kmScalar s);
00059 int kmVec3AreEqual(const kmVec3* p1, const kmVec3* p2);
00060 kmVec3* kmVec3InverseTransform(kmVec3* pOut, const kmVec3* pV, const struct kmMat4* pM);
00061 kmVec3* kmVec3InverseTransformNormal(kmVec3* pOut, const kmVec3* pVect, const struct kmMat4* pM);
00062 kmVec3* kmVec3Assign(kmVec3* pOut, const kmVec3* pIn);
00063 kmVec3* kmVec3Zero(kmVec3* pOut);
00064
00065 #ifdef __cplusplus
00066 }
00067 #endif
00068 #endif