65 lines
1.3 KiB
HTML
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> |