**
device->SetRenderState()
** D3D9的视频卡设备的渲染状态设置方法
下面是一部分可设置的渲染状态:
D3DRS_FILLMODE 绘制模式设置,可设置为点,线与面模式3种分别是:(D3DFILL_POINT , D3DFILL_WIREFRAME, D3DFILL_SOLID)
D3DRS_CULLMODE 消隐模式,按照三角形单元的顶点绕序进行背面消隐,可设置为(禁用背面消隐D3DCULL_NONE,对顺时针绕序消隐D3DCULL_CW,对逆时针绕序消隐D3DCULL_CCW)
D3DRS_LIGHTING 光照开关,可设置为true与false,开启光照或禁用光照
D3DRS_SHADEMODE 着色模式 对顶点的着色模式分2种(平面着色,一个面的颜色根据第一个顶点的颜色值决定D3DSHADE_FLAT,平滑着色,一个面中根据各个顶点的颜色值计算线性插值着色D3DSHADE_GOURAUD,D3DSHADE_PHONG这个不知道是啥子,请指教,好像跟平滑着色一样效果)
D3DRS_ZWRITEENABLE 深度缓存是否可写入设置 默认为true,设为false为不应许写入,设为false后渲染几个模型时将随渲染的时间决定哪个模型在最前(可见)
D3DRS_NORMALIZENORMALS 规范化法向量,默认为不打开,设true为开启,false为关闭,使用了自定义的顶点格式中有使用法向量的需要开启
D3DRS_SPECULARENABLE 启用镜面光,true为开,false为关闭,默认为关闭,因为镜面光为反射光,其计算成本高
D3DRS_ALPHABLENDENABLE 打开融合,true为开,false为关闭,默认为关闭,使用融合能做出隐身的效果
D3DRS_SRCBLEND 设定融合因子,使用不同的融合因子和目标融合因子可以做出很多有趣的事情
D3DRS_DESTBLEND 设定目标融合因子,同上面的组合才能做出很多有趣的事情
device->SetTransform()设置渲染状态之矩阵
下面是我用过的一些状态字:
D3DTS_PROJECTION :设置投影矩阵,将一个透视投影矩阵设置为当前的可观察到的范围,形状及可见度,例如:
D3DXMATRIX touying;
D3DXMatrixPerspectiveFovLH(&touying, D3DX_PI * 0.5f, dm.Width / dm.Height, 1.0f, 1000.0f);//将投影数据写入矩阵proj D3DX_PI*0.5f
device->SetTransform(D3DTS_PROJECTION, &touying); //设置投影矩阵
D3DTS_VIEW :设置观察坐标系,告诉视频卡设备,摄像机在哪个位置,摄像机以哪个点为观察中心,世界坐标系中哪个方向是向上(世界正方向),例如:摄像机在世界坐标系中Z轴的负9点,以世界坐标系0,0,0的点为观察中心,y轴的正方向是世界正方向,代码如下
D3DXVECTOR3 SXJx{ 0,0,-9 }, SXJy{ 0,0,0 }, SXJz{ 0,1,0 }; //摄像机位置,观察点,世界正方向
D3DXMATRIX SXJZD; //摄像机矩阵
D3DXMatrixLookAtLH(&shexiangji, &SXJx, &SXJy, &SXJz); //合并成一个摄像机矩阵
device->SetTransform(D3DTS_VIEW, &shexiangji); //告诉D3D9使用这个观察坐标系
D3DTS_WORLD :设置世界变换矩阵,告诉视频卡设备,把接下来要渲染的模型按照当前设置的矩阵位移,例如在渲染一个物体前,设置一个向x轴的正方向移动5个单位,在接下来渲染的模型都将移动到这个位置,代码如下:
D3DXMATRIX ss;
D3DXMatrixTranslation(&ss, 5.0f, 0.0f, 0.0f); //创建一个平移矩阵
device->SetTransform(D3DTS_WORLD, &ss); //世界变化
目前我就知道这些可设置的渲染状态,还有很多不知道的,我是不会使用SDK的苦逼