CSDN博客

img caimouse
博客专家

附录A 4. Direct3D的着色

发表于2004/9/27 17:33:00  2948人阅读

分类: Direct3D

·附录A 4. Direct3D的着色 (蔡军生 版权所有)
现在来介绍一下Direct3D里的3D多边形着色。在Direct3D里有什么样的着色模式呢?怎么样设置着色模式呢?在Direct3D里有两种着色模式,分别是平面着色和Gouraud着色。两种着色区分就是在多边形里每点着色的区别。平面着色就是用多边形第一个顶点的颜色作来整个多边形里每个点的颜色;而Gouraud着色就是根据每个顶点的颜色,法线和光线来计算出多边形里每个点的颜色,这个就内部进行插值运算着色。比如顶点1的红色成分为0.8,顶点2的红色成分为0.4,用Gouraud着色计算出来顶点1和顶点2中间的红色成分就是0.6。平面着色的优点,就是着色速度快。而Gouraud着色的优点,就是平面比较光滑,看起来比较真实。
下图就两种不同着色的茶壶比较:

两种着色模式还有很多不同点,平面着色模式让两个平面连接的棱看起更尖,而Gouraud着色看起来棱就会变成平滑。但在光线着色里,平面着色不大好,因为整个平面都统一的颜色,看起来不真实,但Gouraud着色刚好相反,看起来比较真实,更加接近现实中光线照着的物体。不过Gouraud着色也会因为进行插值运算,会丢掉一些实物的细节。像下图进行Gouraud着色,就丢掉中间聚光灯。

在Direct3D里的缺省着色模式是Gouraud着色,可以调用函数IDirect3DDevice9::SetRenderState来设置参数D3DRS_SHADEMODE来选择不同的着色模式。下面的代码就是怎么样设置着色模式。

// 设置为平面着色模式。
// pDev是指向IDirect3DDevice9的指针。
hr = pDev->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);
if(FAILED(hr))
{
// 这里处理出错程况。
}

// 设置Gouraud着色模式。缺省是这种模式。
hr = pDev->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
if(FAILED(hr))
{
//这里处理出错程况。
}

阅读全文
0 0

相关文章推荐

img
取 消
img