machine.html
author Eugen Sawin <sawine@me73.com>
Wed, 27 Apr 2011 15:10:42 +0200
changeset 33 2af408534f28
parent 31 744b427d1379
child 36 a828c4cde5b3
permissions -rwxr-xr-x
Added specular lighting.
sawine@2
     1
<html>
sawine@2
     2
<head>
sawine@2
     3
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
sawine@2
     4
<title>Machine Alpha</title>
sawine@26
     5
<style type="text/css">
sawine@26
     6
 body {margin: 0px;}
sawine@26
     7
</style>
sawine@23
     8
<script language="javascript" src="scripts/boot.js"></script>
sawine@2
     9
<script id="fragment-shader" type="x-shader/x-fragment"> 
sawine@2
    10
    #ifdef GL_ES
sawine@2
    11
    precision highp float;
sawine@2
    12
    #endif
sawine@4
    13
sawine@4
    14
    varying vec4 vColour;
sawine@31
    15
    varying vec3 vTransformedNormal;
sawine@31
    16
    varying vec4 vPosition;
sawine@31
    17
sawine@33
    18
    uniform float uMaterialShininess;
sawine@33
    19
sawine@31
    20
    uniform bool uUseLighting;
sawine@31
    21
   
sawine@31
    22
    uniform vec3 uAmbientColour;
sawine@31
    23
    uniform vec3 uPointLightingLocation;
sawine@33
    24
    uniform vec3 uPointLightingSpecularColour;
sawine@33
    25
    uniform vec3 uPointLightingDiffuseColour;
sawine@2
    26
 
sawine@31
    27
    void main(void)
sawine@4
    28
    {
sawine@31
    29
        vec3 lightWeighting;
sawine@31
    30
        if (!uUseLighting) 
sawine@31
    31
        {
sawine@31
    32
            lightWeighting = vec3(1.0, 1.0, 1.0);
sawine@31
    33
        }
sawine@31
    34
        else
sawine@31
    35
        {
sawine@31
    36
            vec3 lightDirection = normalize(uPointLightingLocation - vPosition.xyz);
sawine@33
    37
            vec3 normal = normalize(vTransformedNormal);
sawine@33
    38
            vec3 eyeDirection = normalize(-vPosition.xyz);
sawine@33
    39
            vec3 reflectionDirection = reflect(-lightDirection, normal);
sawine@33
    40
            float specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), uMaterialShininess);
sawine@33
    41
            float diffuseLightWeighting = max(dot(normal, lightDirection), 0.0);
sawine@33
    42
            lightWeighting = uAmbientColour + uPointLightingSpecularColour * specularLightWeighting
sawine@33
    43
                             + uPointLightingDiffuseColour * diffuseLightWeighting;
sawine@31
    44
        }     
sawine@31
    45
        gl_FragColor = vec4(vColour.rgb * lightWeighting, vColour.a);
sawine@2
    46
    }
sawine@2
    47
</script> 
sawine@2
    48
 
sawine@2
    49
<script id="vertex-shader" type="x-shader/x-vertex"> 
sawine@2
    50
    attribute vec3 aVertexPosition;
sawine@24
    51
    attribute vec3 aVertexNormal;
sawine@25
    52
    attribute vec4 aVertexColour;    
sawine@4
    53
sawine@2
    54
    uniform mat4 uMVMatrix;
sawine@2
    55
    uniform mat4 uPMatrix;
sawine@24
    56
    uniform mat3 uNMatrix;
sawine@24
    57
sawine@4
    58
    varying vec4 vColour;
sawine@31
    59
    varying vec3 vTransformedNormal;
sawine@31
    60
    varying vec4 vPosition;
sawine@2
    61
 
sawine@4
    62
    void main(void) 
sawine@4
    63
    {
sawine@31
    64
        vPosition = uMVMatrix * vec4(aVertexPosition, 1.0);
sawine@31
    65
        gl_Position = uPMatrix * vPosition;
sawine@4
    66
        vColour = aVertexColour;
sawine@31
    67
        vTransformedNormal = uNMatrix * aVertexNormal;
sawine@2
    68
    }
sawine@2
    69
</script>
sawine@2
    70
</head>
sawine@2
    71
 
sawine@23
    72
<body onload="boot();">
sawine@2
    73
<canvas id="machine">
sawine@2
    74
  Download a browser with WebGL support, like Chrome or Firefox.
sawine@2
    75
</canvas>
sawine@2
    76
</body>
sawine@2
    77
 
sawine@2
    78
</html>