CS-Notes/docs/_style/prism-master/examples/prism-glsl.html
2018-12-19 14:09:39 +08:00

65 lines
1.3 KiB
HTML

<h2>Vertex shader example</h2>
<pre><code>attribute vec3 vertex;
attribute vec3 normal;
uniform mat4 _mvProj;
uniform mat3 _norm;
varying vec3 vColor;
varying vec3 localPos;
#pragma include "light.glsl"
// constants
vec3 materialColor = vec3(1.0,0.7,0.8);
vec3 specularColor = vec3(1.0,1.0,1.0);
void main(void) {
// compute position
gl_Position = _mvProj * vec4(vertex, 1.0);
localPos = vertex;
// compute light info
vec3 n = normalize(_norm * normal);
vec3 diffuse;
float specular;
float glowingSpecular = 50.0;
getDirectionalLight(n, _dLight, glowingSpecular, diffuse, specular);
vColor = max(diffuse,_ambient.xyz)*materialColor+specular*specularColor+_ambient;
}</code></pre>
<h2>Fragment shader example</h2>
<pre><code>#ifdef GL_ES
precision highp float;
#endif
uniform vec3 BrickColor, MortarColor;
uniform vec3 BrickSize;
uniform vec3 BrickPct;
varying vec3 vColor;
varying vec3 localPos;
void main()
{
vec3 color;
vec3 position, useBrick;
position = localPos / BrickSize.xyz;
if (fract(position.y * 0.5) > 0.5){
position.x += 0.5;
position.z += 0.5;
}
position = fract(position);
useBrick = step(position, BrickPct.xyz);
color = mix(MortarColor, BrickColor, useBrick.x * useBrick.y * useBrick.z);
color *= vColor;
gl_FragColor = vec4(color, 1.0);
}
</code></pre>