📄 gltypedef.h
字号:
//----------------------------------------------------------------------------
//
// 版权所有 Copyright (c) 2003
// Leon Lee
// Leon8086 in CSDN
//
// 允许在不必征得作者的同意的情况下使用、拷贝、分发该代码,或将将该代码使用
// 于除了商业用途之外的其他用途,但请将以上这些说明放置于所有的拷贝之上。
// 未征得作者同意,请勿将该代码用于商业用途。
//
// 允许在该代码基础上进行修改,或在此基础上进行二次开发,但请保持本说明,保证所进行的
// 修改是在本版权说明允许的范围之内的,并保证所开发代码也遵循上述版权说明。
//----------------------------------------------------------------------------
#if ! defined _GLTYPEDEF_H_
#define _GLTYPEDEF_H_
#include <math.h>
namespace MyMath{
//计算x的绝对值
template<class T>
inline const T abs( const T x )
{
return (x>0)?x:(-x);
}
};
struct GLVECTOR2
{
GLVECTOR2( float a, float b )
:x(a),y(b)
{
}
GLVECTOR2( )
: x(0.0f),y(0.0f)
{
}
float x, y;
};
struct GLVECTOR4
{
GLVECTOR4( float x, float y, float z, float w )
: r(x)
, g(y)
, b(z)
, a(w)
{
}
GLVECTOR4( )
: r(0.0f)
, g(0.0f)
, b(0.0f)
, a(0.0f)
{
}
float r, g, b, a;
};
struct GLVECTOR3
{
//构造函数
GLVECTOR3( float a, float b, float c )
: x(a)
, y(b)
, z(c)
{
}
GLVECTOR3( )
: x(0.0f)
, y(0.0f)
, z(0.0f)
{
}
//以下为常用运算符重载
GLVECTOR3 operator +( GLVECTOR3 a )
{
return GLVECTOR3( a.x + x, a.y + y, a.z + z );
}
GLVECTOR3 operator +( float a )
{
return GLVECTOR3( a + x, a + y, a + z );
}
void operator += ( GLVECTOR3 a )
{
x += a.x;
y += a.y;
z += a.z;
}
void operator += ( float a )
{
x += a;
y += a;
z += a;
}
GLVECTOR3 operator -( float a )
{
return GLVECTOR3( x - a , y - a , z - a );
}
GLVECTOR3 operator -( GLVECTOR3 a )
{
return GLVECTOR3( x - a.x , y - a.y , z - a.z );
}
void operator -= ( GLVECTOR3 a )
{
x -= a.x;
y -= a.y;
z -= a.z;
}
void operator -= ( float a )
{
x -= a;
y -= a;
z -= a;
}
//*****************************************
// 此处的乘为矢积
//*****************************************
GLVECTOR3 operator * ( GLVECTOR3 a )
{
return GLVECTOR3( y* a.z - z* a.y,
z* a.x - x* a.z,
x* a.y - y* a.x
);
}
//*****************************************
// 此处的乘为三个分量同时乘某个系数
//*****************************************
GLVECTOR3 operator * ( float a )
{
return GLVECTOR3( x * a,
y * a,
z * a
);
}
void operator *= ( float a )
{
x *= a;
y *= a;
z *= a;
}
bool operator == ( GLVECTOR3 a ) const
{
return( ( MyMath::abs( a.x-x ) < 0.000001 ) && ( MyMath::abs( a.y-y ) < 0.000001 ) && ( MyMath::abs( a.z-z ) < 0.000001 ) );
}
bool operator != ( GLVECTOR3 a ) const
{
return !( a == (*this) );
}
GLVECTOR3& Normalization( )
{
float r = this->R();
x /= r;
y /= r;
z /= r;
return *this;
}
float R( )
{
return (float)sqrt(x*x + y*y + z*z);
}
float x, y, z;
};
struct MESHTRIANGLEINDEX
{
unsigned long dwVertexIndex1;
unsigned long dwVertexIndex2;
unsigned long dwVertexIndex3;
MESHTRIANGLEINDEX( unsigned long a, unsigned long b, unsigned long c )
{
dwVertexIndex1 = a;
dwVertexIndex2 = b;
dwVertexIndex3 = c;
}
MESHTRIANGLEINDEX( )
{
dwVertexIndex1 = 0;
dwVertexIndex2 = 0;
dwVertexIndex3 = 0;
}
};
typedef GLVECTOR3 GLVERTEX3;
typedef GLVECTOR2 GLTEXCOORD;
typedef GLVECTOR4 GLCOLORRGBA;
typedef GLVECTOR3 GLCOLORRGB;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -