码迷,mamicode.com
首页 > 其他好文 > 详细

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

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

标签:实践   float   title   main   oat   cond   str   source   demo   

图形着色器——理论与实践(第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;
}

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

标签:实践   float   title   main   oat   cond   str   source   demo   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!