From 7e08c684ad31f3fe5f547bedb519b797c9b9a8b1 Mon Sep 17 00:00:00 2001 From: bkaradzic <branimirkaradzic@gmail.com> Date: Mon, 10 Dec 2012 19:15:56 -0800 Subject: [PATCH] Changed include guard to make OSX happy (thanks @gtbass). --- examples/common/math.h | 334 ++++++++++++++++++++--------------------- 1 file changed, 167 insertions(+), 167 deletions(-) diff --git a/examples/common/math.h b/examples/common/math.h index 192084dd..17253526 100644 --- a/examples/common/math.h +++ b/examples/common/math.h @@ -1,121 +1,121 @@ -/* - * Copyright 2011-2012 Branimir Karadzic. All rights reserved. - * License: http://www.opensource.org/licenses/BSD-2-Clause - */ - -// simple FPU math lib - -#ifndef __MATH_H__ -#define __MATH_H__ - -#define _USE_MATH_DEFINES -#include <math.h> -#include <string.h> - -inline void vec3Add(float* __restrict _result, const float* __restrict _a, const float* __restrict _b) -{ - _result[0] = _a[0] + _b[0]; - _result[1] = _a[1] + _b[1]; - _result[2] = _a[2] + _b[2]; -} - -inline void vec3Sub(float* __restrict _result, const float* __restrict _a, const float* __restrict _b) -{ - _result[0] = _a[0] - _b[0]; - _result[1] = _a[1] - _b[1]; - _result[2] = _a[2] - _b[2]; -} - -inline void vec3Mul(float* __restrict _result, const float* __restrict _a, const float* __restrict _b) -{ - _result[0] = _a[0] * _b[0]; - _result[1] = _a[1] * _b[1]; - _result[2] = _a[2] * _b[2]; -} - -inline void vec3Mul(float* __restrict _result, const float* __restrict _a, float _b) -{ - _result[0] = _a[0] * _b; - _result[1] = _a[1] * _b; - _result[2] = _a[2] * _b; -} - -inline float vec3Dot(const float* __restrict _a, const float* __restrict _b) -{ - return _a[0]*_b[0] + _a[1]*_b[1] + _a[2]*_b[2]; -} - -inline void vec3Cross(float* __restrict _result, const float* __restrict _a, const float* __restrict _b) -{ - _result[0] = _a[1]*_b[2] - _a[2]*_b[1]; - _result[1] = _a[2]*_b[0] - _a[0]*_b[2]; - _result[2] = _a[0]*_b[1] - _a[1]*_b[0]; -} - -inline void vec3Norm(float* __restrict _result, const float* __restrict _a) -{ - float scale = 1.0f/sqrtf(vec3Dot(_a, _a) ); - _result[0] = _a[0] * scale; - _result[1] = _a[1] * scale; - _result[2] = _a[2] * scale; -} - -inline void mtxIdentity(float* _result) -{ - memset(_result, 0, sizeof(float)*16); - _result[0] = _result[5] = _result[10] = _result[15] = 1.0f; -} - -inline void mtxLookAt(float* __restrict _result, const float* __restrict _eye, const float* __restrict _at) -{ - float tmp[4]; - vec3Sub(tmp, _at, _eye); - - float view[4]; - vec3Norm(view, tmp); - - float up[3] = { 0.0f, 1.0f, 0.0f }; - vec3Cross(tmp, up, view); - - float right[4]; - vec3Norm(right, tmp); - - vec3Cross(up, view, right); - - memset(_result, 0, sizeof(float)*16); - _result[ 0] = right[0]; - _result[ 1] = up[0]; - _result[ 2] = view[0]; - - _result[ 4] = right[1]; - _result[ 5] = up[1]; - _result[ 6] = view[1]; - - _result[ 8] = right[2]; - _result[ 9] = up[2]; - _result[10] = view[2]; - - _result[12] = -vec3Dot(right, _eye); - _result[13] = -vec3Dot(up, _eye); - _result[14] = -vec3Dot(view, _eye); - _result[15] = 1.0f; -} - -inline void mtxProj(float* _result, float _fovy, float _aspect, float _near, float _far) -{ - float height = 1.0f/tanf(_fovy*( (float)M_PI/180.0f)*0.5f); - float width = height * 1.0f/_aspect; - float aa = _far/(_far-_near); - float bb = -_near * aa; - - memset(_result, 0, sizeof(float)*16); - _result[0] = width; - _result[5] = height; - _result[10] = aa; - _result[11] = 1.0f; - _result[14] = bb; -} - +/* + * Copyright 2011-2012 Branimir Karadzic. All rights reserved. + * License: http://www.opensource.org/licenses/BSD-2-Clause + */ + +// simple FPU math lib + +#ifndef __FPU_MATH_H__ +#define __FPU_MATH_H__ + +#define _USE_MATH_DEFINES +#include <math.h> +#include <string.h> + +inline void vec3Add(float* __restrict _result, const float* __restrict _a, const float* __restrict _b) +{ + _result[0] = _a[0] + _b[0]; + _result[1] = _a[1] + _b[1]; + _result[2] = _a[2] + _b[2]; +} + +inline void vec3Sub(float* __restrict _result, const float* __restrict _a, const float* __restrict _b) +{ + _result[0] = _a[0] - _b[0]; + _result[1] = _a[1] - _b[1]; + _result[2] = _a[2] - _b[2]; +} + +inline void vec3Mul(float* __restrict _result, const float* __restrict _a, const float* __restrict _b) +{ + _result[0] = _a[0] * _b[0]; + _result[1] = _a[1] * _b[1]; + _result[2] = _a[2] * _b[2]; +} + +inline void vec3Mul(float* __restrict _result, const float* __restrict _a, float _b) +{ + _result[0] = _a[0] * _b; + _result[1] = _a[1] * _b; + _result[2] = _a[2] * _b; +} + +inline float vec3Dot(const float* __restrict _a, const float* __restrict _b) +{ + return _a[0]*_b[0] + _a[1]*_b[1] + _a[2]*_b[2]; +} + +inline void vec3Cross(float* __restrict _result, const float* __restrict _a, const float* __restrict _b) +{ + _result[0] = _a[1]*_b[2] - _a[2]*_b[1]; + _result[1] = _a[2]*_b[0] - _a[0]*_b[2]; + _result[2] = _a[0]*_b[1] - _a[1]*_b[0]; +} + +inline void vec3Norm(float* __restrict _result, const float* __restrict _a) +{ + float scale = 1.0f/sqrtf(vec3Dot(_a, _a) ); + _result[0] = _a[0] * scale; + _result[1] = _a[1] * scale; + _result[2] = _a[2] * scale; +} + +inline void mtxIdentity(float* _result) +{ + memset(_result, 0, sizeof(float)*16); + _result[0] = _result[5] = _result[10] = _result[15] = 1.0f; +} + +inline void mtxLookAt(float* __restrict _result, const float* __restrict _eye, const float* __restrict _at) +{ + float tmp[4]; + vec3Sub(tmp, _at, _eye); + + float view[4]; + vec3Norm(view, tmp); + + float up[3] = { 0.0f, 1.0f, 0.0f }; + vec3Cross(tmp, up, view); + + float right[4]; + vec3Norm(right, tmp); + + vec3Cross(up, view, right); + + memset(_result, 0, sizeof(float)*16); + _result[ 0] = right[0]; + _result[ 1] = up[0]; + _result[ 2] = view[0]; + + _result[ 4] = right[1]; + _result[ 5] = up[1]; + _result[ 6] = view[1]; + + _result[ 8] = right[2]; + _result[ 9] = up[2]; + _result[10] = view[2]; + + _result[12] = -vec3Dot(right, _eye); + _result[13] = -vec3Dot(up, _eye); + _result[14] = -vec3Dot(view, _eye); + _result[15] = 1.0f; +} + +inline void mtxProj(float* _result, float _fovy, float _aspect, float _near, float _far) +{ + float height = 1.0f/tanf(_fovy*( (float)M_PI/180.0f)*0.5f); + float width = height * 1.0f/_aspect; + float aa = _far/(_far-_near); + float bb = -_near * aa; + + memset(_result, 0, sizeof(float)*16); + _result[0] = width; + _result[5] = height; + _result[10] = aa; + _result[11] = 1.0f; + _result[14] = bb; +} + void mtxOrtho(float* _result, float _left, float _right, float _bottom, float _top, float _near, float _far) { const float aa = 2.0f/(_right - _left); @@ -134,26 +134,26 @@ void mtxOrtho(float* _result, float _left, float _right, float _bottom, float _t _result[14] = ff; _result[15] = 1.0f; } - -void mtxRotateXY(float* _result, float _ax, float _ay) -{ - float sinx = sinf(_ax); - float cosx = cosf(_ax); - float siny = sinf(_ay); - float cosy = cosf(_ay); - - memset(_result, 0, sizeof(float)*16); - _result[ 0] = cosy; - _result[ 2] = -siny; - _result[ 4] = -sinx * siny; - _result[ 5] = cosx; - _result[ 6] = -sinx * cosy; - _result[ 8] = cosx * siny; - _result[ 9] = sinx; - _result[10] = cosx * cosy; - _result[15] = 1.0f; -} - + +void mtxRotateXY(float* _result, float _ax, float _ay) +{ + float sinx = sinf(_ax); + float cosx = cosf(_ax); + float siny = sinf(_ay); + float cosy = cosf(_ay); + + memset(_result, 0, sizeof(float)*16); + _result[ 0] = cosy; + _result[ 2] = -siny; + _result[ 4] = -sinx * siny; + _result[ 5] = cosx; + _result[ 6] = -sinx * cosy; + _result[ 8] = cosx * siny; + _result[ 9] = sinx; + _result[10] = cosx * cosy; + _result[15] = 1.0f; +} + inline void vec4MulMtx(float* __restrict _result, const float* __restrict _vec, const float* __restrict _mat) { _result[0] = _vec[0] * _mat[ 0] + _vec[1] * _mat[4] + _vec[2] * _mat[ 8] + _vec[3] * _mat[12]; @@ -209,33 +209,33 @@ inline void mtxInverse(float* __restrict _result, const float* __restrict _a) float wz = _a[14]; float ww = _a[15]; - float det = 0.0f; - det += xx * (yy*(zz*ww - zw*wz) - yz*(zy*ww - zw*wy) + yw*(zy*wz - zz*wy) ); - det -= xy * (yx*(zz*ww - zw*wz) - yz*(zx*ww - zw*wx) + yw*(zx*wz - zz*wx) ); - det += xz * (yx*(zy*ww - zw*wy) - yy*(zx*ww - zw*wx) + yw*(zx*wy - zy*wx) ); - det -= xw * (yx*(zy*wz - zz*wy) - yy*(zx*wz - zz*wx) + yz*(zx*wy - zy*wx) ); - - float invDet = 1.0f/det; - - _result[ 0] = +(yy*(zz*ww - wz*zw) - yz*(zy*ww - wy*zw) + yw*(zy*wz - wy*zz) ) * invDet; - _result[ 1] = -(xy*(zz*ww - wz*zw) - xz*(zy*ww - wy*zw) + xw*(zy*wz - wy*zz) ) * invDet; - _result[ 2] = +(xy*(yz*ww - wz*yw) - xz*(yy*ww - wy*yw) + xw*(yy*wz - wy*yz) ) * invDet; - _result[ 3] = -(xy*(yz*zw - zz*yw) - xz*(yy*zw - zy*yw) + xw*(yy*zz - zy*yz) ) * invDet; - - _result[ 4] = -(yx*(zz*ww - wz*zw) - yz*(zx*ww - wx*zw) + yw*(zx*wz - wx*zz) ) * invDet; - _result[ 5] = +(xx*(zz*ww - wz*zw) - xz*(zx*ww - wx*zw) + xw*(zx*wz - wx*zz) ) * invDet; - _result[ 6] = -(xx*(yz*ww - wz*yw) - xz*(yx*ww - wx*yw) + xw*(yx*wz - wx*yz) ) * invDet; - _result[ 7] = +(xx*(yz*zw - zz*yw) - xz*(yx*zw - zx*yw) + xw*(yx*zz - zx*yz) ) * invDet; - - _result[ 8] = +(yx*(zy*ww - wy*zw) - yy*(zx*ww - wx*zw) + yw*(zx*wy - wx*zy) ) * invDet; - _result[ 9] = -(xx*(zy*ww - wy*zw) - xy*(zx*ww - wx*zw) + xw*(zx*wy - wx*zy) ) * invDet; - _result[10] = +(xx*(yy*ww - wy*yw) - xy*(yx*ww - wx*yw) + xw*(yx*wy - wx*yy) ) * invDet; - _result[11] = -(xx*(yy*zw - zy*yw) - xy*(yx*zw - zx*yw) + xw*(yx*zy - zx*yy) ) * invDet; - - _result[12] = -(yx*(zy*wz - wy*zz) - yy*(zx*wz - wx*zz) + yz*(zx*wy - wx*zy) ) * invDet; - _result[13] = +(xx*(zy*wz - wy*zz) - xy*(zx*wz - wx*zz) + xz*(zx*wy - wx*zy) ) * invDet; - _result[14] = -(xx*(yy*wz - wy*yz) - xy*(yx*wz - wx*yz) + xz*(yx*wy - wx*yy) ) * invDet; - _result[15] = +(xx*(yy*zz - zy*yz) - xy*(yx*zz - zx*yz) + xz*(yx*zy - zx*yy) ) * invDet; + float det = 0.0f; + det += xx * (yy*(zz*ww - zw*wz) - yz*(zy*ww - zw*wy) + yw*(zy*wz - zz*wy) ); + det -= xy * (yx*(zz*ww - zw*wz) - yz*(zx*ww - zw*wx) + yw*(zx*wz - zz*wx) ); + det += xz * (yx*(zy*ww - zw*wy) - yy*(zx*ww - zw*wx) + yw*(zx*wy - zy*wx) ); + det -= xw * (yx*(zy*wz - zz*wy) - yy*(zx*wz - zz*wx) + yz*(zx*wy - zy*wx) ); + + float invDet = 1.0f/det; + + _result[ 0] = +(yy*(zz*ww - wz*zw) - yz*(zy*ww - wy*zw) + yw*(zy*wz - wy*zz) ) * invDet; + _result[ 1] = -(xy*(zz*ww - wz*zw) - xz*(zy*ww - wy*zw) + xw*(zy*wz - wy*zz) ) * invDet; + _result[ 2] = +(xy*(yz*ww - wz*yw) - xz*(yy*ww - wy*yw) + xw*(yy*wz - wy*yz) ) * invDet; + _result[ 3] = -(xy*(yz*zw - zz*yw) - xz*(yy*zw - zy*yw) + xw*(yy*zz - zy*yz) ) * invDet; + + _result[ 4] = -(yx*(zz*ww - wz*zw) - yz*(zx*ww - wx*zw) + yw*(zx*wz - wx*zz) ) * invDet; + _result[ 5] = +(xx*(zz*ww - wz*zw) - xz*(zx*ww - wx*zw) + xw*(zx*wz - wx*zz) ) * invDet; + _result[ 6] = -(xx*(yz*ww - wz*yw) - xz*(yx*ww - wx*yw) + xw*(yx*wz - wx*yz) ) * invDet; + _result[ 7] = +(xx*(yz*zw - zz*yw) - xz*(yx*zw - zx*yw) + xw*(yx*zz - zx*yz) ) * invDet; + + _result[ 8] = +(yx*(zy*ww - wy*zw) - yy*(zx*ww - wx*zw) + yw*(zx*wy - wx*zy) ) * invDet; + _result[ 9] = -(xx*(zy*ww - wy*zw) - xy*(zx*ww - wx*zw) + xw*(zx*wy - wx*zy) ) * invDet; + _result[10] = +(xx*(yy*ww - wy*yw) - xy*(yx*ww - wx*yw) + xw*(yx*wy - wx*yy) ) * invDet; + _result[11] = -(xx*(yy*zw - zy*yw) - xy*(yx*zw - zx*yw) + xw*(yx*zy - zx*yy) ) * invDet; + + _result[12] = -(yx*(zy*wz - wy*zz) - yy*(zx*wz - wx*zz) + yz*(zx*wy - wx*zy) ) * invDet; + _result[13] = +(xx*(zy*wz - wy*zz) - xy*(zx*wz - wx*zz) + xz*(zx*wy - wx*zy) ) * invDet; + _result[14] = -(xx*(yy*wz - wy*yz) - xy*(yx*wz - wx*yz) + xz*(yx*wy - wx*yy) ) * invDet; + _result[15] = +(xx*(yy*zz - zy*yz) - xy*(yx*zz - zx*yz) + xz*(yx*zy - zx*yy) ) * invDet; } - -#endif // __MATH_H__ + +#endif // __FPU_MATH_H__