光影传说

光影传说

要有光!
有光就有影子。
光影是上帝(不是西方的伪神耶稣)创造万物的表现手法。
--------------------- 扯淡完毕 ---------------------


I.光线算法公式
颜色=材质环境光*环境光强度+系数*材质漫反射光*环境漫反射光强度
系数=dot(光向量,顶点法向量)

II.固定管线渲染
设置好环境光和顶点法线材质后,Direct3d自动进行顶点光线计算。

III.光影着色(gpu shader)
启用光影着色脚本后,GPU会用着色脚本对每个顶点进行光线渲染。
分析记录I(龙书17章节 VS Diffuse Lighting)
源码: http://code.google.com/p/3dlearn/source/browse/trunk/DirectX/DragonBook1Code/Chapter%2017/VS%20Diffuse%20Lighting/vs_diffuse.cpp
光影脚本: http://code.google.com/p/3dlearn/source/browse/trunk/DirectX/DragonBook1Code/Chapter+17/VS+Diffuse+Lighting/diffuse.txt
(注意:龙书一在最新的dx sdk下编译时,此实例程序会不正常,需要修改代码和光影脚本。以上链接是已经修正的源码)

顶点附加光影的效果


IV.卡通效果
算法思想:使用一个突变的灰度纹理贴图,使得在纹理坐标连续的情况下,纹理颜色会突然变化。借助光线的夹角系数实现纹理在u方向连续,v固定不变。让顶点使用固定的颜色。
源码: http://code.google.com/p/3dlearn/source/browse/trunk/DirectX/DragonBook1Code/Chapter%2017/VS%20Toon%201%20No%20Outlines/toon.cpp
光源脚本: http://code.google.com/p/3dlearn/source/browse/trunk/DirectX/DragonBook1Code/Chapter%2017/VS%20Toon%201%20No%20Outlines/toon.txt
效果:

你可能感兴趣的:(光影传说)