#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
#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