项目中的简单shader

#ifndef __SHADERSOURCE_H__ 
#define __SHADERSOURCE_H__




std::string shanderVertex = 
"varying vec2 TexCoord0;\n"
"varying float lightIntensity;\n"
"uniform vec3 LightPosition = float3(0.0f, 0.0f, 0.0f);\n"
"varying vec3 N;\n"
"varying vec3 v;\n"
"void main( void )\n"
"{\n"
" gl_Position = ftransform();\n"
" TexCoord0   =   gl_MultiTexCoord0.xy;  \n"
" vec3 tnorm = normalize(gl_NormalMatrix * gl_Normal);\n"
" float dotval = max(dot(normalize(LightPosition - vec3(gl_Position)), tnorm), 0.0);\n"
" lightIntensity = dotval;\n"
" v = vec3(gl_ModelViewMatrix * gl_Vertex);\n"
" N = normalize(gl_NormalMatrix * gl_Normal);\n"
"}\n";


 std::string shaderChangeColor =
"varying vec2 TexCoord0; \n"
"uniform sampler2D Texture0;\n"
"uniform sampler2D projectionMap;\n"
"uniform bool visiblelight;\n" // 是否使用光
"varying float lightIntensity; \n"


"varying vec3 N;\n"
"varying vec3 v;\n"
"void main( void )\n"
"{\n"
" gl_FragColor = texture2D( Texture0, TexCoord0 ).brga;\n"
" float4 color = texture2D( projectionMap, TexCoord0).brga;\n"
" if (color.a > 0)\n"
" gl_FragColor = color;\n"
" float t = gl_FragColor.b;\n"
" gl_FragColor.b = gl_FragColor.g;\n"
" gl_FragColor.g = t;\n"
//wzk
//" if(gl_FragColor.a < 0.1f)\n"
//" {\n"
//" gl_FragColor.a = 1.0f;\n"
//" gl_FragColor.rgb = 0.65f;\n"
//" }\n"
" vec3 L = normalize(gl_LightSource[0].position.xyz - v);\n"
" vec3 E = normalize(-v);\n" // we are in Eye Coordinates, so EyePos is (0,0,0)  
" vec3 R = normalize(-reflect(L,N));\n" 


//calculate Ambient Term:  
" vec4 Iamb = gl_FrontLightProduct[0].ambient;\n"


//calculate Diffuse Term:  
" vec4 Idiff = gl_FrontLightProduct[0].diffuse * max(dot(N,L), 0.0);\n"
" Idiff = clamp(Idiff, 0.0, 1.0);\n" 
" Idiff = Idiff*2.5;\n" 


// calculate Specular Term:
" vec4 Ispec = gl_FrontLightProduct[0].specular * pow(max(dot(R,E),0.0),0.3*gl_FrontMaterial.shininess);\n"
" Ispec = clamp(Ispec, 0.0, 1.0);\n"
" if(visiblelight)\n"
" gl_FragColor = gl_FragColor*0.6 + Iamb*0.2 + Idiff*0.2/* + Ispec*0.1*/;\n"
/*" if(visiblelight)\n"
//" gl_FragColor *= (1 + lightIntensity*10);\n"
" gl_FragColor = gl_FragColor*0.5 + float4(1,1,1,1)*lightIntensity;\n"
" gl_FragColor = clamp(gl_FragColor, 0.0, 1.0); \n"*/
"}\n";


 std::string str_projvertexShader = 
 "varying vec4 projCoord;\n"
 "void main()\n"
 "{\n"
 " projCoord = gl_TextureMatrix1 * gl_Vertex;\n"
 " gl_Position = ftransform();\n"
 " gl_FrontColor = gl_Color;\n"
 "}\n";


 std::string str_projfragShader = 
 "uniform sampler2D projectionMap;\n"
 "varying vec4 projCoord;\n"
 "void main()\n"
 "{\n"
 " vec4 dividedCoord = projCoord / projCoord.w ;\n"
 " vec4 color =  texture2D(projectionMap,dividedCoord.st);\n"
 "   color = float4(0,0,1,1);\n"
 " gl_FragColor =   color * gl_Color;\n"
 "}\n";




 // 参考这个shader改成glsl
 // http://www.cppblog.com/Leaf/archive/2011/01/07/138093.html
 std::string str_projVert =
"void main()\n"
"{\n"
" gl_Position = ftransform();\n"
"}\n";


 std::string str_projFrag = 
 "uniform sampler2D projectionMap;\n"
 "uniform float3 projPos; \n"
 "void main()\n"
 "{\n"
  "float3 Center = float3(0, 0, 20);\n"//投影中心,Y值被忽略。
  "float Radius = 4;\n"//投影范围
  "float3 UVector = float3(1, 0, 0)/(2 * Radius);\n"//将世界坐标变换到纹理投影空间坐标并规范化到0-1之间(正投影)
  "float3 VVector = float3(0, 0, 1)/(-2 * Radius);\n"//同上
  "float2 coord;  \n"
  "coord.x = dot(projPos - Center, UVector) + 0.5;\n"
  "coord.y = dot(projPos - Center, VVector) + 0.5;\n"
  "gl_FragColor += texture2D( projectionMap, coord);\n"
 "}\n";


#endif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值