DirectX 3D学习笔记

DirectX 3D学习笔记(一)
Ⅰ、渲染状态
设备的渲染状态控制Direct3D设备的光栅化组件的行为。通过改变光栅渲染状态属性,可以设置使用何种方式来进行渲染着色,以及如何进行雾化等。
在Direct3D中我们可以通过IDirect3DDevice9::SetRenderState()函数来设置渲染状态。
HRESULT SetRenderState(
D3DRENDERSTATETYPE State,
DWORD Value
);

通过枚举函数SetRenderState中的第一个参数D3DRENDERSTATETYPE,可以得到
所有可能的渲染状态。

① 着色模式
Direct3D中的物体表面是有很多多边形组成的,如三角形。当渲染一个物体的多边形
的时候,不同的着色模式在其表面是会产生不同的效果的。每一种着色模式决定了平面上的每个点的颜色和光照强度。通过SetRenderState函数的参数D3DRENDERSTATETYPE枚举到的着色模式为D3DSHADEMODE,定义如下

Defines constants that describe the supported shading modes.
typedef enum D3DSHADEMODE
{
D3DSHADE_FLAT = 1,
D3DSHADE_GOURAUD = 2,
D3DSHADE_PHONG = 3,
D3DSHADE_FORCE_DWORD = 0x7fffffff,
} D3DSHADEMODE, *LPD3DSHADEMODE;

在上面得到的定义中,Direct3D主要给我们提供了两种着色模式,平面着色和Gouraud着色。后面的两种不需要考虑。

A、 平面着色
在平面着色模式下,Direct3D渲染一个多边形的时候,把多边形的第一个顶点的颜色
作为整个多边形的颜色进行着色。在这种情况下,一个多边形的所有像素的颜色值都等于该多边形的第一个顶点的颜色值。而且如果这些多边形是不共面的,在flat着色模式下渲染的三维图形将出现明显的。

B、 戈劳德着色
在戈劳德着色模式下,Direct3D渲染一个多边形的时候,它会先用顶点法向量和灯光
参数计算每个顶点的颜色,然后在改多边形的表面上进行线性插值,来得到每个像素的颜色值。

eg:gD3Device->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_GOURAUD);//Gouraud
eg:gD3Device->SetRenderState(D3DRS_SHADEMODE,D3DSHADE_FLAT); //Flat

② 多边形填充模式
在默认的状态下,Direct3D会把渲染好的多边形完全显示。但可能有时候不需要将全
部显示,比如只要显示所有的顶点,或者是所有的边。同样可以通过枚举函数SetRenderState中的第一个参数D3DRENDERSTATETYPE,得到Direct3D的填充模式。
typedef enum D3DFILLMODE
{
D3DFILL_POINT = 1,
D3DFILL_WIREFRAME = 2,
D3DFILL_SOLID = 3,
D3DFILL_FORCE_DWORD = 0x7fffffff,
} D3DFILLMODE, *LPD3DFILLMODE;

D3DFILL_POINT:点模式,绘制多边形的每一个顶点
D3DFILL_WIREFRAME:线模式,在多边形的每个边绘制一条线
D3DFILL_SOLID:面模式,也是默认模式,对多边形的面进行绘制填充
// 线模式
eg:gD3Device->SetRenderState(D3DRS_FILLMODE, D3DFILL_POINT);

你可能感兴趣的:(D3d)