203 lines
4.0 KiB
C++
203 lines
4.0 KiB
C++
#ifndef DATA_TYPES_H_INCLUDED
|
|
#define DATA_TYPES_H_INCLUDED
|
|
|
|
/*
|
|
This code contains additional data types and some const values to use
|
|
*/
|
|
|
|
#include <math.h>
|
|
#include <string>
|
|
#include <sstream>
|
|
#include <stdlib.h>
|
|
#include "boost/lexical_cast.hpp"
|
|
|
|
#include "NewDataTypes.h"
|
|
|
|
namespace SE
|
|
{
|
|
|
|
typedef unsigned int cardinal;
|
|
typedef unsigned short int word;
|
|
//typedef unsigned char byte;
|
|
|
|
typedef cardinal* pcardinal;
|
|
|
|
//Use mat4 to store projection/modelview matrices (i.e. for shadow mapping)
|
|
struct mat4
|
|
{
|
|
float m[16];
|
|
};
|
|
|
|
struct TSmpTriangle
|
|
{
|
|
vec3 p[3];
|
|
vec3 v;
|
|
vec3 w;
|
|
vec3 n;
|
|
};
|
|
|
|
|
|
const float pi = 3.14159265359f;
|
|
|
|
const float CONST_EPSILON = 0.00001f;
|
|
|
|
const float WhiteColor[4] = {1.0f, 1.0f, 1.0f, 1.0f};
|
|
const float RedColor[4] = {1.0f, 0.0f, 0.0f, 1.0f};
|
|
const float NoColor[4] = {0.0f, 0.0f, 0.0f, 1.0f};
|
|
|
|
const mat3 IdentityMatrix(vec3(1.0f, 0.0f, 0.0f), vec3(0.0f, 1.0f, 0.0f), vec3(0.0f, 0.0f, 1.0f));
|
|
|
|
const mat4 IdentityMatrix4 =
|
|
{ 1.f, 0.f, 0.f, 0.f,
|
|
0.f, 1.f, 0.f, 0.f,
|
|
0.f, 0.f, 1.f, 0.f,
|
|
0.f, 0.f, 0.f, 1.f };
|
|
|
|
|
|
const vec3 ZeroVec3(0.0f, 0.0f, 0.0f);
|
|
|
|
const vec4 ZeroQuat(0.0f, 0.0f, 0.0f, 1.0f);
|
|
|
|
const std::string fendl="\x0D\x0A"; //Windows-style, for files
|
|
const std::string endl="\n";
|
|
|
|
vec4 InverseQuat(const vec4& q);
|
|
|
|
//For shadow mapping or for OpenGL ES 2.0
|
|
mat4 InverseModelViewMatrix(const mat4& m);
|
|
mat4 SetToNormalMatrix(const mat4& m);
|
|
mat4 MakeOrthoMatrix(float width, float height);
|
|
mat4 MakeFrustumMatrix(float left, float right, float bottom, float top, float nearVal, float farVal);
|
|
mat4 MakePerspectiveMatrix(float angle, float aspect, float zNear, float zFar);
|
|
|
|
mat4 MultMatrixMatrix(const mat4& m1, const mat4& m2);
|
|
|
|
bool IsFloatEqual(float a, float b);
|
|
|
|
bool LineCouldCrossTriangle(const vec3& a, const vec3& b, const TSmpTriangle& tr); //overall (dimensional) test
|
|
|
|
int LineCrossTriangle(const vec3& a, const vec3& b, const TSmpTriangle& tr);
|
|
|
|
int LineCrossTriangle(const vec3& a, const vec3& b, const TSmpTriangle& tr, vec3& CrossPoint);
|
|
|
|
int PointInTriangle(const vec3& q, const TSmpTriangle& tr);
|
|
|
|
|
|
template<typename T>
|
|
inline std::string tostr(T i)
|
|
{
|
|
return boost::lexical_cast<std::string>(i);
|
|
}
|
|
|
|
inline int toint(const char* str)
|
|
{
|
|
return boost::lexical_cast<int>(str);
|
|
}
|
|
|
|
inline int toint(const std::string& str)
|
|
{
|
|
return boost::lexical_cast<int>(str);
|
|
}
|
|
//#ifndef TARGET_WIN32 //Already defined in windows.h
|
|
|
|
template<typename T>
|
|
inline T min(T a, T b)
|
|
{
|
|
return a < b ? a : b;
|
|
}
|
|
|
|
template<typename T>
|
|
inline T max(T a, T b)
|
|
{
|
|
return a > b ? a : b;
|
|
}
|
|
|
|
//#endif
|
|
|
|
template<typename T>
|
|
inline T clamp(T a, T c_from, T c_to)
|
|
{
|
|
if (a < c_from)
|
|
{
|
|
return c_from;
|
|
}
|
|
|
|
if (a > c_to)
|
|
{
|
|
return c_to;
|
|
}
|
|
|
|
return a;
|
|
}
|
|
|
|
template<typename T>
|
|
inline T sign(T a)
|
|
{
|
|
if (a == 0)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if (a < 0)
|
|
{
|
|
return -1;
|
|
}
|
|
|
|
|
|
return 1;
|
|
}
|
|
|
|
|
|
float roundf(float r);
|
|
|
|
template<typename T>
|
|
T InterpolateLinear(T a, T b, float t)
|
|
{
|
|
return a + (b-a)*t;
|
|
}
|
|
|
|
template<typename T>
|
|
T InterpolateSqr(T a, T b, float t)
|
|
{
|
|
return a + (b-a)*t*t;
|
|
}
|
|
|
|
|
|
template<typename T>
|
|
T InterpolateSqrt(T a, T b, float t)
|
|
{
|
|
return a + (b-a)*sqrtf(t);
|
|
}
|
|
|
|
template<typename T>
|
|
bool IsPower2(T x)
|
|
{
|
|
return ( (x > 0) && ((x & (x - 1)) == 0) );
|
|
}
|
|
|
|
cardinal GetGreaterPower2(cardinal x);
|
|
|
|
vec2 StringToVec2(std::string str);
|
|
vec3 StringToVec3(std::string str);
|
|
vec4 StringToVec4(std::string str);
|
|
|
|
// ================================================
|
|
// ========== wide strings and UTF8 strings =======
|
|
// ================================================
|
|
|
|
|
|
void utf8toWStr(std::wstring& dest, const std::string& src);
|
|
|
|
void wstrToUtf8(std::string& dest, const std::wstring& src);
|
|
|
|
std::string wstrToUtf8(const std::wstring& str);
|
|
|
|
std::wstring utf8toWStr(const std::string& str);
|
|
|
|
std::ostream& operator<<(std::ostream& f, const std::wstring& s);
|
|
|
|
std::istream& operator>>(std::istream& f, std::wstring& s);
|
|
|
|
} //namespace SE
|
|
|
|
#endif |