关于Direct3D中用于控制三维多边形的着色模式

 用于渲染多边形的着色模式完全影响到渲染结果。着色模式决定在多边形表面上任意一点上颜色的强度和光照。Microsoft Direct3D支持两种着色模式:平面着色和高洛德着色。  
    在平面着色模式中,当Direct3D渲染流水线渲染一个多边形时,使用第一个顶点的材质颜色作为整个多边形的颜色。用平面着色渲染的三维物体有明显的边缘,如果它们不共面的话。  
      
     当Direct3D使用高洛德着色渲染一个多边形时,它根据顶点法向和光照参数为每个顶点计算颜色。然后,贯穿多边形的表面对颜色进行插值。插值是线性的。例如,如果顶点1的颜色的红色分量为0.8,顶点2的颜色的红色分量为0.4,如果使用高洛德着色模式和RGB颜色模型,那么Direct3D光照模块会把红色分量0.6赋给位于这两个顶点连线中点处的像素。  
    高洛德着色使经过光照的平直表面看起来比平面着色更真实。平面着色模式中的表面具有相同的颜色,但高洛德着色能使光线更准确地照射在表面上。如果附近有点光源,那么这种效果特别明显。高洛德着色使在平面着色中明显可见的边缘变得光滑。但是,它会产生马克带(marc band),这是在相邻多边形间没有平滑混合的颜色带或光带。应用程序可以通过增加物体中多边形的数量,或增大屏幕分辨率,或增加颜色深度来减少马克带效应。  
    设置着色模式可以通过IDirect3DDevice9::SetRenderState方法改变着色模式。应该将State参数设为D3DRS_SHADEMODE。Value参数必须被设为D3DSHADEMODE枚举类型的成员。以下示例代码显示了如何将Direct3D应用程序当前的着色模式设置为平面或高洛德着色模式。  

 

//  设置为平面着色。
//  本示例代码假设pDev是一个指向IDirect3DDevice9接口的有效指针。
hr  =  pDev -> SetRenderState(D3DRS_SHADEMODE, D3DSHADE_FLAT);  
if (FAILED(hr))  
{  
// 这里是错误处理代码。
}


//  设置为高洛德着色。这是Direct3D的默认设置。
hr  =  pDev -> SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);  
if (FAILED(hr))  
{  
// 这里是错误处理代码。
}

 


原文地址: http://www.csinx.org/IBlog/article.asp?id=4

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值