关于Direct3D中用于控制三维多边形的着色模式
2009-06-21 20:45
316 查看
用于渲染多边形的着色模式完全影响到渲染结果。着色模式决定在多边形表面上任意一点上颜色的强度和光照。Microsoft Direct3D支持两种着色模式:平面着色和高洛德着色。
在平面着色模式中,当Direct3D渲染流水线渲染一个多边形时,使用第一个顶点的材质颜色作为整个多边形的颜色。用平面着色渲染的三维物体有明显的边缘,如果它们不共面的话。
当Direct3D使用高洛德着色渲染一个多边形时,它根据顶点法向和光照参数为每个顶点计算颜色。然后,贯穿多边形的表面对颜色进行插值。插值是线性的。例如,如果顶点1的颜色的红色分量为0.8,顶点2的颜色的红色分量为0.4,如果使用高洛德着色模式和RGB颜色模型,那么Direct3D光照模块会把红色分量0.6赋给位于这两个顶点连线中点处的像素。
高洛德着色使经过光照的平直表面看起来比平面着色更真实。平面着色模式中的表面具有相同的颜色,但高洛德着色能使光线更准确地照射在表面上。如果附近有点光源,那么这种效果特别明显。高洛德着色使在平面着色中明显可见的边缘变得光滑。但是,它会产生马克带(marc band),这是在相邻多边形间没有平滑混合的颜色带或光带。应用程序可以通过增加物体中多边形的数量,或增大屏幕分辨率,或增加颜色深度来减少马克带效应。
设置着色模式可以通过IDirect3DDevice9::SetRenderState方法改变着色模式。应该将State参数设为D3DRS_SHADEMODE。Value参数必须被设为D3DSHADEMODE枚举类型的成员。以下示例代码显示了如何将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)) { // 这里是错误处理代码。 }
相关文章推荐
- 关于Direct3D中用于控制三维多边形的着色模式
- 关于控制反转(IOC)容器 ,依赖注入(DI)模式必读文章收集
- BAT-把当前用户以管理员权限运行(用户帐户控制:用于内置管理员帐户的管理员批准模式)
- ACE 对象生命周期管理者:一种用于控制对象创建和销毁的补充模式
- 设计及设计模式:关于Java权限控制算法
- MediaPlayer类可用于控制音频/视频文件或流的播放。关于如何使用这个类的方法还可以阅读VideoView类的文档。
- flash AS3.0中有关于播放控制进度条控制声音的两种模式
- stm32比较输出模式配置以及用于步进电机控制(采用步进电机驱动器)
- 关于CS模式下,控制一个容器内控件的值问题
- 关于23种设计模式的有趣见解
- 关于ftp的主动模式和被动模式
- 设计模式有害论--关于个人对设计模式的一些小看法
- 关于23种设计模式的有趣见解(转)
- 关于Java的23种设计模式的有趣见解
- C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介
- 关于生产者-消费者-订阅者模式的那些事
- 关于23种设计模式的有趣见解(转)
- 关于js获取IE浏览器版本以及文本模式 搜集资料总结 分享希望大家有用
- 关于Java的访问控制修饰符
- 关于23种设计模式的有趣见解