⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gltypedef.h

📁 三维模型数据格式3DS数据的读取。详细分解3DS数据格式
💻 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 + -