首页 > 其他 > 详细

着色器编程学习(一)——类波浪+生成法线

时间:2016-11-23 22:12:12      阅读:323      评论:0      收藏:0      [点我收藏+]

图形着色器——理论与实践(第2版) 

这个书在一些翻译上比较坑,而且案例都是都不完整,更重要的是中文翻译版本竟然没有书的网站也就是说没有案例代码。

所以在此我说一下网址:http://cgeducation.org/ShadersBookSecond/Source/

Demo.glib

Ortho -1. 1. -1. 1 .. 1 1000.
Vertex demo.vert
Fragment demo.frag
Program Dome
Color 1. .5 0.

QuadXY -2. 5. 200 200

 

demo.vert


in vec4 aVertex;
in vec4 aColor;

varying float vLightIntensity;
varying vec3 vColor;
vec3 LIGHTPOS =vec3(0.,2.,0.);
vec3 ECpos;
void main(void)
{
vec4 thisPos=aVertex;
vColor=aColor.rgb;

float thisX=thisPos.x;
float thisY=thisPos.y;
vec2 thisXY=thisPos.xy;
thisPos.z=0.3*sin(dot(thisXY,thisXY));

//计算法线,求微分
vec3 xtangent=vec3(1.,0.,0.);
xtangent.z=2.*0.3*thisX*cos(dot(thisXY,thisXY));
vec3 ytangent=vec3(0.,1.,0.);
ytangent.z=2.*0.3*thisY*cos(dot(thisXY,thisXY));

vec3 thisNormal=normalize(cross(xtangent,ytangent));
vec3 ECpos=vec3(gl_ModelViewMatrix*thisPos);
vLightIntensity=dot(normalize(LIGHTPOS-ECpos),thisNormal);
vLightIntensity=0.3+abs(vLightIntensity); //环境光
vLightIntensity=clamp(vLightIntensity,0.0,1.0);
gl_Position=gl_ModelViewProjectionMatrix*thisPos;

}

 

demo.frag

 


in vec4 vColor;
in float vLightIntensity;

void
main(void)
{
gl_FragColor = vColor*vLightIntensity;
}

着色器编程学习(一)——类波浪+生成法线

原文:http://www.cnblogs.com/blueroses/p/6095147.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!