8,324
社区成员
发帖
与我相关
我的任务
分享
#include"ENrenderState.h"
//设置填充点/线/面
void ENrenderState::RenderState_FillMode(int Off)
{
if(Off==1)
{
m_pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_POINT );//
}
else if(Off==2)
{
m_pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME );
}
else if(Off==3)
{
m_pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID );
}
}
//设置渲染模式flat/gouraud
void ENrenderState::RenderState_RenderMode(int Off)
{
if(Off==1)
{
m_pd3dDevice->SetRenderState( D3DRS_SHADEMODE, D3DSHADE_FLAT );
}
else if(Off==2)
{
m_pd3dDevice->SetRenderState( D3DRS_SHADEMODE, D3DSHADE_GOURAUD );
}
else if(Off==3)
{
m_pd3dDevice->SetRenderState( D3DRS_SHADEMODE, D3DSHADE_PHONG );
}
}
//desc:设置雾化
//parametar - type : 类型
// color: 雾色
// start: 设置起始位置(第一类)
// end : 设置结束位置(第一类)
// density: 密度(第一类除外)
VOID ENrenderState::RenderState_SetFog(int type,COLORREF color,float start,float end,
float density,bool use)
{
if(use==false) {return;}
// m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );
//激活雾化处理
m_pd3dDevice->SetRenderState( D3DRS_FOGENABLE,TRUE );
//设置fog color(alpha不起作用);P178
m_pd3dDevice->SetRenderState( D3DRS_FOGCOLOR,color);//0x00ffffFF
//检测硬件是否支持log发散处理;p180
D3DCAPS9 stCaps;
m_pd3dDevice->GetDeviceCaps (&stCaps);
if (stCaps.RasterCaps&D3DPRASTERCAPS_FOGRANGE)
{
//开启发散处理
m_pd3dDevice->SetRenderState(D3DRS_RANGEFOGENABLE, true);
}
switch(type)
{
//线性log
case 0:
{
m_pd3dDevice->SetRenderState( D3DRS_FOGTABLEMODE , D3DFOG_LINEAR);
m_pd3dDevice->SetRenderState( D3DRS_FOGSTART , *(DWORD*)&start);
m_pd3dDevice->SetRenderState( D3DRS_FOGEND , *(DWORD*)&end);
break;
}
case 1://指数log
{
m_pd3dDevice->SetRenderState( D3DRS_FOGDENSITY , *(DWORD*)&density);
m_pd3dDevice->SetRenderState( D3DRS_FOGTABLEMODE , D3DFOG_EXP);
break;
}
case 2://2次指数log
{
m_pd3dDevice->SetRenderState( D3DRS_FOGDENSITY , *(DWORD*)&density);
m_pd3dDevice->SetRenderState( D3DRS_FOGTABLEMODE , D3DFOG_EXP2);
break;
}
default:
{
MessageBox(hWnd,"fog type is wrong","type error",MB_OK);
}
}
}
//还原
void ENrenderState::RenderState_Reset()
{
//恢复总是通过深度测试
// m_pd3dDevice->SetRenderState( D3DRS_ZFUNC, D3DCMP_ALWAYS );//设置深度测试
//是否用深度测试(是否按物体在空间的坐标,设置渲染顺序)
m_pd3dDevice->SetRenderState( D3DRS_ZENABLE, true );
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );//不激活ALPHA混合计算(用于绘制半透明)P159
m_pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, FALSE );//该函数用于用户设置渲染状态:参数1 设置渲染状态 参数2 状态值,本句使透明度混合可用
//激活雾化处理
m_pd3dDevice->SetRenderState( D3DRS_FOGENABLE,FALSE);
}
#include"ENrenderState.h"
//1:物理RGB混合方式
//2:设置纹理坐标是第几个纹理层(默认纹理坐标)P197
//3:设置纹理坐标输出为几维(2D)P199
HRESULT ENrenderState::RenderState_TEXTURE_BasicSet(int arrangement,bool use)
{
if(use==false) {return 0;}
//color 混合值为:textrue1 * textrue2 p188(颜色混合方式)
m_pd3dDevice->SetTextureStageState(arrangement, D3DTSS_COLOROP,D3DTOP_MODULATE);
//设置纹理坐标是第几个纹理层(默认纹理坐标)P197
m_pd3dDevice->SetTextureStageState(arrangement, D3DTSS_TEXCOORDINDEX,D3DTSS_TCI_PASSTHRU);
//设置纹理坐标输出为几维(2D)P199
m_pd3dDevice->SetTextureStageState(arrangement,D3DTSS_TEXTURETRANSFORMFLAGS,D3DTTFF_COUNT2);
return S_OK;
}
//当前层的颜色与上一层色的混合(RGB)
HRESULT ENrenderState::RenderState_TEXTURE_RGBblend(int arrangement,bool use)
{
if(use==false) {return 0;}
//纹理颜色混合 p186
//D3DTSS_COLORARG/D3DTSS_COLORARG2当前层的颜色与上一层色的混合.D3DTA_TEXTURE:纹理颜色(P124)
m_pd3dDevice->SetTextureStageState( arrangement, D3DTSS_COLORARG1, D3DTA_TEXTURE );
//D3DTA_COMPLEMENT:光线的反色(光变暗,暗变光)(P124)
m_pd3dDevice->SetTextureStageState( arrangement, D3DTSS_COLORARG2, D3DTA_CURRENT );
return S_OK;
}
//纹理采样
//1:最近点采样
//2:线性采样
//3:各向异性采样
//4:多级渐进采样
void ENrenderState::RenderState_TEXTURE_Sampling(int arrangement,int mode,bool use)
{
if(use==false) {return;}
if(mode==1)//最近点采样
{
//消除小格仔(纹理采样)3D物体的色,投影到屏幕上.P131
//只有定点采样不产生颜色线
m_pd3dDevice->SetSamplerState(arrangement, D3DSAMP_MINFILTER, D3DTEXF_POINT );
m_pd3dDevice->SetSamplerState(arrangement, D3DSAMP_MAGFILTER, D3DTEXF_POINT );
}
else if(mode==2)//线性采样
{
//线性采样
m_pd3dDevice->SetSamplerState( arrangement, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );
m_pd3dDevice->SetSamplerState( arrangement, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );
}
else if(mode==3)//各向异性采样
{
//检测支持各向异性纹理过滤级数(D3DTEXF_ANISOTROPIC)
D3DCAPS9 stCaps;
m_pd3dDevice->GetDeviceCaps(&stCaps);
int maxAnisotropy=stCaps.MaxAnisotropy;//支持16级
//消除小格仔(纹理采样)3D物体的色,投影到屏幕上.P131
//D3DSAMP_MINFILTER:缩小过滤器,用于纹理缩小时减少闪烁失真
//D3DSAMP_MAGFILTER:放大过滤器,用于纹理放大时,减少出现色块
//采样方式(各向异性纹理过滤);P133
m_pd3dDevice->SetSamplerState( arrangement, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC );
m_pd3dDevice->SetSamplerState( arrangement, D3DSAMP_MAGFILTER, D3DTEXF_ANISOTROPIC );
//1:禁止各向异性纹理过滤;2-4:值大效果好
m_pd3dDevice->SetSamplerState(arrangement, D3DSAMP_MAXANISOTROPY, maxAnisotropy/2);
}
else if(mode==4)//多级渐进采样
{
//通过使用这个过滤器,Direct3D将选择两个最接近的mipmap等级,缩小和放大过滤每
//个等级,然后线性联合计算它们两个等级来得到最终的颜色值。
//多级渐进纹理采样;P137
m_pd3dDevice->SetSamplerState(arrangement, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
//第三个参数:值越大锯齿越多,负数就变模糊
m_pd3dDevice->SetSamplerState(arrangement, D3DSAMP_MAXMIPLEVEL,0);//Test1:level
}
}
#include"ENrenderState.h"
//纹理寻址
//1:重叠纹理寻址
//2:镜像纹理寻址
//3:夹取纹理寻址
//4:边框颜色纹理寻址
void ENrenderState::RenderState_TEXTURE_VisMode(int arrangement,int mode,int use)
{
if(mode==1)//重叠纹理寻址
{
//重叠纹理寻址
//纹理拉伸(不复制纹理,作边缘像素的拉伸);P137(纹理寻址)
m_pd3dDevice->SetSamplerState(arrangement, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP );
m_pd3dDevice->SetSamplerState(arrangement, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP );
}
else if(mode==2)
{
//镜像纹理寻址
m_pd3dDevice->SetSamplerState(arrangement, D3DSAMP_ADDRESSU, D3DTADDRESS_MIRROR );
m_pd3dDevice->SetSamplerState(arrangement, D3DSAMP_ADDRESSV, D3DTADDRESS_MIRROR );
}
else if(mode==3)
{
//夹取纹理寻址
m_pd3dDevice->SetSamplerState(arrangement, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP );
m_pd3dDevice->SetSamplerState(arrangement, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP );
}
else if(mode==4)
{
//边框颜色纹理寻址
m_pd3dDevice->SetSamplerState(arrangement, D3DSAMP_ADDRESSU, D3DTADDRESS_BORDER );
m_pd3dDevice->SetSamplerState(arrangement, D3DSAMP_ADDRESSV, D3DTADDRESS_BORDER );
m_pd3dDevice->SetSamplerState(arrangement, D3DSAMP_BORDERCOLOR, 0x0000ffff);
}
}
//设置纹理复制方式(与纹理寻址合用)(获取纹理矩阵)
void ENrenderState::RenderState_TEXTURE_Matrix(int arrangement,D3DXVECTOR4 mat11,
D3DXVECTOR4 mat22,D3DXVECTOR4 mat33,D3DXVECTOR4 mat44,int mode,
bool use)
{
if(use==false){return;}
//纹理寻址
RenderState_TEXTURE_VisMode(arrangement,mode,use);
//立体纹理矩阵(纹理坐标自动生成P197)
D3DXMATRIX mat;
D3DXMatrixIdentity(&mat);
if(mat11!=D3DXVECTOR4(0,0,0,0))
{
mat._11 = mat11.x; mat._12 = mat11.y; mat._13 = mat11.z; mat._14 = mat11.w;
}
if(mat22!=D3DXVECTOR4(0,0,0,0))
{
mat._21 = mat22.x; mat._22 = mat22.y; mat._23 = mat22.z; mat._24 = mat22.w;
}
if(mat33!=D3DXVECTOR4(0,0,0,0))
{
mat._31 = mat33.x; mat._32 = mat33.y; mat._33 = mat33.z; mat._34 = mat33.w;
}
if(mat44!=D3DXVECTOR4(0,0,0,0))
{
mat._41 = mat44.x; mat._42 = mat44.y; mat._43 = mat44.z; mat._44 = mat44.w;
}
if(arrangement==0)
{
m_pd3dDevice->SetTransform(D3DTS_TEXTURE0, &mat );
}
else if(arrangement==1)
{
m_pd3dDevice->SetTransform(D3DTS_TEXTURE1, &mat );
}
else if(arrangement==2)
{
m_pd3dDevice->SetTransform(D3DTS_TEXTURE2, &mat );
}
else if(arrangement==3)
{
m_pd3dDevice->SetTransform(D3DTS_TEXTURE3, &mat );
}
else if(arrangement==4)
{
m_pd3dDevice->SetTransform(D3DTS_TEXTURE1, &mat );
}
else if(arrangement==5)
{
m_pd3dDevice->SetTransform(D3DTS_TEXTURE5, &mat );
}
else if(arrangement==6)
{
m_pd3dDevice->SetTransform(D3DTS_TEXTURE6, &mat );
}
//一定要这样设置
m_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, D3DTTFF_COUNT2);
}
void ENobject3D::LHxxDRAW_3DOBJECT(char* nameT)
{
int i=0;
TList=ENobject3DListOb.GetNode(nameT);
LHxx3DOBJECT *ob=TList->ObjectData;
if(!ob->LHxxVisible){return;}
if(ob->LHxxShowAxes==1)
{
//线
ob->line3DOb->LHxxDRAW_LINE1(ob->line3DOb->ENlineListOb,nameT);
}
//获取转换后的物体矩阵
D3DXMATRIXA16 World_temp=ob->LHxxMatrixOb->getTransform();
m_pd3dDevice->SetTransform( D3DTS_WORLD, &World_temp);
//设置渲染模式(渲染出正常面或者不断渲染出最底的面)
TENd3dOb->ENrenderStateOb->RenderState_CULLMODE(D3DRS_CULLMODE,D3DCULL_NONE);
//深度测试
//1:激活深度缓冲区;
//2:设置深度缓冲区;
//3:允许深度缓冲区更新
//4:设置深度测试
TENd3dOb->ENrenderStateOb->RenderState_ZFUNCTEST(true);
//辅助功能
//1:使程序允许抖动
TENd3dOb->ENrenderStateOb->RenderState_ASSISTANT(true);
//desc: 只适合美工设置顶点alpha,再在程序上使用(要将透明部分,在最后再渲染多一次)
TENd3dOb->ENrenderStateOb->RenderState_ALPHAART(ob->LHxx3DArtAlpha); //是否美工设置alpha);
//纹理alpha
TENd3dOb->ENrenderStateOb->RenderState_ALPHATEXTRUE(ob->LHxx3DTextAlpha);
//alpha混合(魔法)
TENd3dOb->ENrenderStateOb->RenderState_ALPHABLEND_M(ob->LHxx3DMagicAlpha);
//设置渲染点/线/面
TENd3dOb->ENrenderStateOb->RenderState_FillMode(ob->LHxxFillMode);
//设置渲染flat/gouraud/phong
TENd3dOb->ENrenderStateOb->RenderState_RenderMode(ob->LHxxRenderMode);
//desc:设置雾化
//parametar - type : 类型
// color: 雾色
// start: 设置起始位置(第一类)
// end : 设置结束位置(第一类)
// density: 密度(第一类除外)
TENd3dOb->ENrenderStateOb->RenderState_SetFog(ob->LHxxFogType,ob->LHxxFogColor
,ob->LHxxFogStart,ob->LHxxFogEnd,ob->LHxxFogDensity,ob->LHxxFogOff);
m_pd3dDevice->SetTexture( 0, ob->LHxx3DTexAT[ob->LHxx3DTexATCurFrame]
.LHxxATTexture);
//1:物理RGB混合方式
//2:设置纹理坐标是第几个纹理层(默认纹理坐标)P197
//3:设置纹理坐标输出为几维(2D)P199
TENd3dOb->ENrenderStateOb->RenderState_TEXTURE_BasicSet(0,true);
//当前层的颜色与上一层色的混合(RGB)
TENd3dOb->ENrenderStateOb->RenderState_TEXTURE_RGBblend(0,true);
//纹理采样
TENd3dOb->ENrenderStateOb->RenderState_TEXTURE_Sampling(0,3,true);
//纹理寻址
TENd3dOb->ENrenderStateOb->RenderState_TEXTURE_VisMode(0,1,true);
/*
//不能用(显示出问题)
//设置纹理复制方式(与纹理寻址合用)
RenderState_TEXTURE_Matrix(int arrangement,D3DXVECTOR4 mat11,
D3DXVECTOR4 mat22,D3DXVECTOR4 mat33,D3DXVECTOR4 mat44,int mode,
bool use);
*/
if(ob->LHxx3DMulitText_List->size()>0)
{
int arrangement=1;
list<LHxxTEXAT>::iterator ite=ob->LHxx3DMulitText_List->begin();
for(ite=ob->LHxx3DMulitText_List->begin();
ite!=ob->LHxx3DMulitText_List->end();ite++)
{
if(ite->LHxxMultiTexVis==0)//1:显示多层纹理
{
continue;
}
m_pd3dDevice->SetTexture( arrangement, ite->LHxxATTexture);
//1:物理RGB混合方式
//2:设置纹理坐标是第几个纹理层(默认纹理坐标)P197
//3:设置纹理坐标输出为几维(2D)P199
TENd3dOb->ENrenderStateOb->RenderState_TEXTURE_BasicSet(arrangement,true);
//当前层的颜色与上一层色的混合(RGB)
TENd3dOb->ENrenderStateOb->RenderState_TEXTURE_RGBblend(arrangement,true);
//纹理采样
TENd3dOb->ENrenderStateOb->RenderState_TEXTURE_Sampling(arrangement,3,true);
//纹理寻址
TENd3dOb->ENrenderStateOb->RenderState_TEXTURE_VisMode(arrangement,1,true);
arrangement++;
}
}
//将顶点缓冲区和渲染流链接;P45
m_pd3dDevice->SetStreamSource( 0, ob->LHxx3DMVertexBuffer, 0,
sizeof(LHxx3DMODELVERTEX) );
//声明当前的渲染数据流中的灵活顶点格式;P45
m_pd3dDevice->SetFVF( LHxx3DMODELVERTEXFVF );
//索引缓冲区
//设置当前绘制的索引数组为它的参数pIndexDate所表示的索引缓冲区;P55
m_pd3dDevice->SetIndices( ob->LHxx3DMIndexBuffer );//D3DPT_POINTLIST D3DPT_TRIANGLELIST
//能够绘制当前的索引数组;P56(多边形用)
m_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, 0,0, ob->LHxx3DMNumVertices,0, ob->LHxx3DMNumFaces );
CountFace+=ob->LHxx3DMNumVertices/3;//计算面数
if(ob->object3Dlight!=NULL)
{
//shadow
ob->ShadowOb->ShadowRender();
}
//还原matrix
World_temp=ob->LHxxMatrixOb->getSaveSystem();
m_pd3dDevice->SetTransform( D3DTS_WORLD, &World_temp);
//还原
TENd3dOb->ENrenderStateOb->RenderState_Reset();
for(i=0;i<8;i++)
{
m_pd3dDevice->SetTextureStageState( i,D3DTSS_COLOROP,D3DTOP_DISABLE);
}
}
#include"ENrenderState.h"
//desc: 设置渲染模式(渲染出正常面或者不断渲染出最底的面)
// Value : D3DCULL_NONE:画正常面(defaut)
// -- D3DCULL_NONE = 1,
// -- D3DCULL_CW = 2,
// -- D3DCULL_CCW = 3,
// -- D3DCULL_FORCE_DWORD = 0x7fffffff,
void ENrenderState::RenderState_CULLMODE(D3DRENDERSTATETYPE State,DWORD Value)
{
//Value=D3DCULL_CW;//正常显示
//Value=D3DCULL_CCW;//不断渲染出最底的面
//Value=RGB(255,200,0);
m_pd3dDevice->SetRenderState( State, Value);
}
//desc: 深度测试
// 1:激活深度缓冲区;
// 2:设置深度缓冲区;
// 3:允许深度缓冲区更新
// 4:设置深度测试
void ENrenderState::RenderState_ZFUNCTEST(bool use)
{
//渲染时,是否将第一个面遮档第二个面
m_pd3dDevice->SetRenderState( D3DRS_ZENABLE, use );//激活深度缓冲区P157
m_pd3dDevice->SetRenderState( D3DRS_ZFUNC, D3DCMP_LESS );//设置深度缓冲区
m_pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE, use);//允许深度缓冲区更新
//是否用深度测试(是否按物体在空间的坐标,设置渲染顺序)
m_pd3dDevice->SetRenderState( D3DRS_ZENABLE, use );
/*
typedef enum _D3DCMPFUNC {
D3DCMP_NEVER = 1,//总是返回false
D3DCMP_LESS = 2,//深度测试值,小于深度缓冲区中相应值时,返回true
D3DCMP_EQUAL = 3,//深度测试值,等于深度缓冲区中相应值时,返回true
D3DCMP_LESSEQUAL = 4,//深度测试值,小于等于深度缓冲区中相应值时,返回true
D3DCMP_GREATER = 5,//深度测试值,大于深度缓冲区中相应值时,返回true
D3DCMP_NOTEQUAL = 6,//深度测试值,不等于深度缓冲区中相应值时,返回true
D3DCMP_GREATEREQUAL = 7,//深度测试值,大于深度缓冲区中相应值时,返回true
D3DCMP_ALWAYS = 8,//总是返回true
D3DCMP_FORCE_DWORD = 0x7fffffff,
} D3DCMPFUNC;
*/
}
//desc: 辅助功能
// 1:使程序允许抖动;
// 2:
// 3:
// 4:
void ENrenderState::RenderState_ASSISTANT(bool use)
{
//D3DRS_DITHERENABLE:使程序允许抖动,默认是FALSE。(效果不明显)
m_pd3dDevice->SetRenderState( D3DRS_DITHERENABLE, use );
//打开抗锯齿直线绘制
m_pd3dDevice->SetRenderState( D3DRS_ANTIALIASEDLINEENABLE , use );
}
//desc: 只适合美工设置顶点alpha,再在程序上使用(要将透明部分,在最后再渲染多一次)
void ENrenderState::RenderState_ALPHAART(bool use)
{
if(use==false) {return;}
//alpha混合P159
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, use );//激活ALPHA混合计算(用于绘制半透明)P159
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );//设置Alpha的混合系数;P160
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );//设置Alpha的混合系数;P160
//
}
//纹理alpha
void ENrenderState::RenderState_ALPHATEXTRUE(bool use)
{
if(use==false) {return;}
// Enable alpha blending and testing
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, use );//激活ALPHA混合计算(用于绘制半透明)P159
m_pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, use );//该函数用于用户设置渲染状态:参数1 设置渲染状态 参数2 状态值,本句使透明度混合可用
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);//D3DBLEND_ONE,D3DBLEND_SRCALPHA
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );//D3DBLEND_INVSRCALPHA
//del the color key
//设置深度测试值P166(如果返回TRUE则绘制)(设置黑色为不显示)
m_pd3dDevice->SetRenderState( D3DRS_ALPHAREF, 0x00000000 );
//设置ALPHA测试函数大于参考值则返回TRUE;P166
m_pd3dDevice->SetRenderState( D3DRS_ALPHAFUNC, D3DCMP_GREATER );
}
//alpha混合(魔法)
void ENrenderState::RenderState_ALPHABLEND_M(bool use)
{
if(use==false) {return;}
//激活ALPHA混合计算(用于绘制半透明)P159
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, use );
m_pd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, use );//该函数用于用户设置渲染状态:参数1 设置渲染状态 参数2 状态值,本句使透明度混合可用
//
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND,D3DBLEND_ONE);//设置Alpha的混合系数;P160
/*
//(背景)缓冲区色为粉红
D3DBLEND_ZERO = 1,//原色
D3DBLEND_ONE = 2,//粉红
D3DBLEND_SRCCOLOR = 3,//多色结合
D3DBLEND_INVSRCCOLOR = 4,//原色透明
D3DBLEND_SRCALPHA = 5,//除黑色,其它粉红
D3DBLEND_INVSRCALPHA = 6,//原色
D3DBLEND_DESTALPHA = 7,//粉红透明
D3DBLEND_INVDESTALPHA = 8,//原色
D3DBLEND_DESTCOLOR = 9,//粉红透明,混合blue
D3DBLEND_INVDESTCOLOR = 10,//透明混合,alpha在%90左右
D3DBLEND_SRCALPHASAT = 11,//原色
D3DBLEND_BOTHSRCALPHA = 12,//除黑色,其它粉红
D3DBLEND_BOTHINVSRCALPHA = 13,//原色
D3DBLEND_BLENDFACTOR = 14, //粉红透明
D3DBLEND_INVBLENDFACTOR = 15, //原色
D3DBLEND_FORCE_DWORD = 0x7fffffff,
*/
}