OpenGL进阶(十三)-GLSL光照(Lighting)-创新互联
                                            提要
在上一篇文章中,我们介绍了简单的Shading,同时提出了一个光照模型,模拟了一个点光源,但是,关于光的故事还没有结束...

今天要学习的是方向光源(Directional Light),聚光灯,per pixel shading,halfway vector。
关于光源的原理及数学描述,请参考:光线追踪(RayTracing)算法理论与实践(三)光照
方向光源
方向光源就两个参数,方向和强度。
还是简单的 ambient + diffuse + spec 光照模型。先看shader的代码。
basic.vert
#version 400 layout (location = 0) in vec3 VertexPosition;   layout (location = 1) in vec3 VertexNormal;    out vec3 LightIntensity;  struct LightInfo{ 	vec4 Direction; 	vec3 Intensity; };  struct MaterialInfo{ 	vec3 Ka; 	vec3 Kd; 	vec3 Ks; 	float Shininess; };  uniform LightInfo Light; uniform	MaterialInfo Material;  uniform mat4 ModelViewMatrix; uniform mat3 NormalMatrix; uniform mat4 ProjectionMatrix; uniform mat4 MVP;   void getEyeSpace(out vec3 norm, out vec4 position) { 	norm =  normalize(NormalMatrix * VertexNormal); 	position = ModelViewMatrix * vec4(VertexPosition, 1.0); }    vec3 ads(vec4 position, vec3 norm) { 	vec3 s; 	if(Light.Direction.w == 0.0) 		s = normalize(vec3(Light.Direction)); 	else 		s = normalize(vec3(Light.Direction - position)); 	vec3 v = normalize(vec3(-position)); 	vec3 r = reflect(-s, norm);  	return Light.Intensity * (Material.Ka + Material.Kd*max(dot(s,norm), 0.0) +  	       Material.Ks * pow(max(dot(r,v),0.0), Material.Shininess)); }  void main() { 	vec3 eyeNorm; 	vec4 eyePosition; 	getEyeSpace(eyeNorm, eyePosition); 	LightIntensity = ads(eyePosition, eyeNorm); 	 	gl_Position = MVP * vec4( VertexPosition, 1.0); }在ads函数中,首先通过nomal矩阵将顶点法向量变换到视口坐标下,(nomal矩阵其实就是model-view矩阵的左上3x3的矩阵)然后通过model-view矩阵将顶点坐标转化为视口坐标系(eye coordinates)下。
接下来的ads用来计算光照模型下顶点的颜色,分别计算三个分量,然后相加。
basic.frag
#version 400  in vec3 LightIntensity;  void main(void) { 	gl_FragColor = vec4(LightIntensity, 1.0); 	//gl_FragColor = vec4(1.0,1.0,0.1, 1.0); }这个就是将根据顶点shader传来的颜色对片段进行赋值。另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章标题:OpenGL进阶(十三)-GLSL光照(Lighting)-创新互联
网站地址:http://www.scyingshan.cn/article/eogpj.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 