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

📄 utility.h

📁 DirectInput的基本实现 只是基本应用
💻 H
字号:
/********************************************************************
	created:	2007/03/14
	created:	14:3:2007   15:03
	filename: 	Utility.h
	author:		任晓宇
	
	purpose:	辅助工具
	changelog:	2007/05/09	为了优化将大部分纹理压缩为dds格式,此处加入
							将文件后缀名转为dds的辅助函数。
*********************************************************************/

#pragma once


#ifndef SAFE_DELETE
#define SAFE_DELETE(p)       { if(p) { delete (p);     (p)=NULL; } }
#endif    
#ifndef SAFE_DELETE_ARRAY
#define SAFE_DELETE_ARRAY(p) { if(p) { delete[] (p);   (p)=NULL; } }
#endif    
#ifndef SAFE_RELEASE
#define SAFE_RELEASE(p)      { if(p) { (p)->Release(); (p)=NULL; } }
#endif

#ifndef V
#define V(x)           { hr = x; }
#endif
#ifndef V_RETURN
#define V_RETURN(x)    { hr = x; if( FAILED(hr) ) { return hr; } }
#endif


#define COLOR_GETAVALUE( argb ) ( (BYTE)( ( argb ) >> 24 ) )
#define COLOR_GETRVALUE( argb ) ( (BYTE)( ( argb ) >> 16 ) )
#define COLOR_GETGVALUE( argb ) ( (BYTE)( ( argb ) >> 8 ) )
#define COLOR_GETBVALUE( argb ) ( (BYTE)( argb ) )

/** 与场景混合的类型
*/
enum SceneBlendType
{
	/// 不透明
	SBT_OPAQUE = 0,
	/// Alpha半透明
	SBT_TRANSPARENT_ALPHA,
	/// 使用源颜色做Alpha因子,实现半透明
	SBT_TRANSPARENT_COLOR,
	/// 与场景颜色相加,通常用来加亮
	SBT_ADD_COLOR,
	/// 与场景颜色相加,通常用来增加原场景的细节
	SBT_ADD_ALPHA,
	/// 与场景颜色相乘
	SBT_MODULATE,
	/// 与场景颜色相乘的2倍
	SBT_MODULATE2,
	/// 使用顶点色的Alpha通道,实现半透明
	SBT_TRANSPARENT_DIFFUSE,
	SBT_MAX_NUMBER,
};

/** 路径解析
	@remarks
		.x文件中有的文件名包含路径,此函数可以将路径去掉。
*/
inline void GetRealFileName( std::string &name )
{
	size_t pos = name.find_last_of( '/' );
	if( pos != std::string::npos )
	{
		name = name.substr( pos+1, name.size()-pos-1 );
		return;
	}
	pos = name.find_last_of( '\\' );
	if( pos != std::string::npos )
	{
		name = name.substr( pos+1, name.size()-pos-1 );
		return;
	}
}

/** 向量各分量相乘
*/
D3DXVECTOR3 Vec3Mutiply( const D3DXVECTOR3 &v1, const D3DXVECTOR3 &v2 );

/** 求一个向量的“垂直”向量
*/
void Vec3Perpendicular( D3DXVECTOR3 &out, const D3DXVECTOR3 &src );

/** 已知一向量和一角度定位的锥体,求穿过锥体顶点并位于锥体内的随机向量。
	@param
		dir 已知向量,锥体的轴
	@param
		fAngle 已知角度,轴到锥体某一边的弧度
	@param
		result 返回结果。穿过锥体顶点,并且位于锥体内的向量。

	求出粒子的发射方向等于该锥体内穿过发射器位置的一条射线。
*/
void RandomDeviant( D3DXVECTOR3 &result, const D3DXVECTOR3 &dir, float fAngle );

/** 随机值: 0-1
*/
float UnitRandom();

/** 随机值: fLow-fHigh
*/
float RangeRandom(float fLow, float fHigh);

/** 随机值: (-1) - (1)
*/
float SymmetricRandom();


void ChangeFileNameToDDS( string &name );

inline DWORD F2DW( FLOAT f )
{
	return *((DWORD*)&f); 
}
inline float DW2F( DWORD dw )
{
	return *((FLOAT*)&dw); 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -