Here's a rough port of the shader in your link:

vertex:

`uniform mat4 modelViewMatrix;`

uniform mat4 modelViewProjectionMatrix;

uniform vec3 lightPositions[8];

uniform vec3 diffuseColors[8];

attribute vec4 position;

attribute vec3 normal;

attribute vec2 texture0;

varying vec3 vnormal;

varying vec4 pos;

varying vec4 diffuseColor;

varying vec2 texCoord;

void main() {

vnormal = normalize(modelViewMatrix * vec4(normal, 0.0)).xyz;

pos = modelViewMatrix * position;

diffuseColor = vec4(diffuseColors[0], 0.0);

texCoord = texture0.xy;

gl_Position = modelViewProjectionMatrix * position;

}

fragment:

`precision highp float;`

uniform sampler2D textureUnit0;

uniform vec3 lightPositions[8];

varying vec3 vnormal;

varying vec4 pos;

varying vec4 diffuseColor;

varying vec2 texCoord;

void main() {

vec4 color = texture2D(textureUnit0, texCoord);

// Adjust this...

vec4 matspec = vec4(0.8, 0.8, 0.8, 0.0);

vec4 lightspec = vec4(1.0, 1.0, 1.0, 0.0);

float shininess = 0.45;

// ...

vec4 lpos = vec4(lightPositions[0], 0.0);

vec4 s = -normalize(pos-lpos);

vec3 light = s.xyz;

vec3 n = normalize(vnormal);

vec3 r = -reflect(light, n);

r = normalize(r);

vec3 v = -pos.xyz;

v = normalize(v);

vec4 diffuse = color * max(0.0, dot(n, s.xyz)) * diffuseColor;

vec4 specular = lightspec * matspec * pow(max(0.0, dot(r, v)), shininess);

gl_FragColor = diffuse + specular;

}

To get different specular effects, adjust the settings inside the comments...especially the shininess value. Note that you can't use this shader on transparent objects as it is. You would have to write a version that takes alpha into account if that is needed.

Hope this helps...