用Shader实现标准光照模型
2012-09-07 07:01
399 查看
DXSDK里光照模型的讲解依然停留在DX9的固定管线时代;DX10及DX11的文档里只是API文档,居然一点基于Shader的光照模型讲解文章都未见,失望.
无奈,打开NV官网,找到这样一篇
了解标准光照基础知识后,就不会面对MAX的材质系统,Maya的NodeBasedMaterialSystem感到陌生.
这里贴下这组光照模型的Cg代码
float4x4matViewProjection;
float3GlobalAmbient;
float3LightColor;
float3LightPosition;
float4EyePosition;
float3Ke;
float3Ka;
float3Kd;
float3Ks;
floatShininess;
voidvs_main(
infloat4InPosition:POSITION,
infloat3InNormal:NORMAL,
outfloat4OutPosition:POSITION,
outfloat4OutColor:COLOR0
)
{
OutPosition=mul(InPosition,matViewProjection);
float3P=InPosition.xyz;
float3N=InNormal;
//Computetheemissiveterm
float3Emissive=Ke;
//Computetheambientterm
float3Ambient=Ka*GlobalAmbient;
//Computethediffuseterm
float3L=normalize(LightPosition-P);
floatDiffuseLight=max(dot(N,L),0);
float3Diffuse=Kd*LightColor*DiffuseLight;
//Computethespecularterm
float3V=normalize(EyePosition-P);
float3H=normalize(L+V);
floatSpecularLight=pow(max(dot(N,H),0),Shininess);
if(DiffuseLight<=0)SpecularLight=0;
float3Specular=Ks*LightColor*SpecularLight;
OutColor.xyz=Emissive+Ambient+Diffuse+Specular;
OutColor.w=1;
}
float4ps_main(float4OutColor:COLOR0):COLOR0
{
return(OutColor);
}
相关文章推荐
- Unity实现标准光照模型的Shader代码
- Unity3D Shader之光照模型——理论与实践:用两种方式来实现漫反射Diffuse Reflection
- Shader自学笔记 2.1.1 逐顶点漫反射光照模型实现
- unity shader 入门之路(五)标准光照模型理论
- Shader自学笔记 2.1.2 逐像素漫反射光照模型实现
- UnityShader初级篇——实现逐顶点高光反射光照模型
- Shader自学笔记 2.1.3 半兰伯特光照模型实现
- Unity3D - Shader - 实现漫反射光照模型
- 三种光照模型的shader实现
- <unity shader入门精要> - unity shader 中实现漫反射光照模型
- UnityShader入门精要学习笔记(五):Unity中实现漫反射光照模型
- 评分模型的检验方法和标准&信用评分及实现
- shader中一些光照模型
- 探究OpenGL光照模型的着色器实现
- 【Aladdin Unity3D Shader编程】之三 光照模型(二)
- UnityShader初级篇——实现逐像素高光反射光照模型
- 火云开发课堂 - 《Shader从入门到精通》系列 第十九节:在Shader中实现3D模型的UV动画
- 基本光照模型实现-漫反射
- Shader系列(1):Lambert光照模型
- OpenGL 4.0 GLSL 用单光源 实现逐顶点 漫反射光照模型