machine.html
author Eugen Sawin <sawine@me73.com>
Wed, 27 Apr 2011 14:14:07 +0200
changeset 30 95688249c40c
parent 26 84a998ac11c0
child 31 744b427d1379
permissions -rwxr-xr-x
Added per-vertex positional 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@24
    15
    varying vec3 vLightWeighting;
sawine@2
    16
 
sawine@4
    17
    void main(void) 
sawine@4
    18
    {
sawine@24
    19
        gl_FragColor = vec4(vColour.rgb * vLightWeighting, vColour.a);
sawine@2
    20
    }
sawine@2
    21
</script> 
sawine@2
    22
 
sawine@2
    23
<script id="vertex-shader" type="x-shader/x-vertex"> 
sawine@2
    24
    attribute vec3 aVertexPosition;
sawine@24
    25
    attribute vec3 aVertexNormal;
sawine@25
    26
    attribute vec4 aVertexColour;    
sawine@4
    27
sawine@2
    28
    uniform mat4 uMVMatrix;
sawine@2
    29
    uniform mat4 uPMatrix;
sawine@24
    30
    uniform mat3 uNMatrix;
sawine@24
    31
sawine@24
    32
    uniform vec3 uAmbientColour;
sawine@24
    33
    uniform vec3 uLightingDirection;
sawine@24
    34
    uniform vec3 uDirectionalColour;
sawine@30
    35
    uniform vec3 uPointLightingLocation;
sawine@30
    36
    uniform vec3 uPointLightingColour;
sawine@24
    37
sawine@24
    38
    uniform bool uUseLighting;
sawine@4
    39
sawine@4
    40
    varying vec4 vColour;
sawine@24
    41
    varying vec3 vLightWeighting;
sawine@2
    42
 
sawine@4
    43
    void main(void) 
sawine@4
    44
    {
sawine@30
    45
        vec4 mvPosition = uMVMatrix * vec4(aVertexPosition, 1.0);
sawine@30
    46
        gl_Position = uPMatrix * mvPosition;
sawine@4
    47
        vColour = aVertexColour;
sawine@25
    48
sawine@24
    49
        if (!uUseLighting)
sawine@24
    50
        {
sawine@24
    51
            vLightWeighting = vec3(1.0, 1.0, 1.0);
sawine@24
    52
        }
sawine@24
    53
        else
sawine@24
    54
        {
sawine@30
    55
            //vec3 transformedNormal = uNMatrix * aVertexNormal;
sawine@30
    56
            //float directionalLightWeighting = max(dot(transformedNormal, uLightingDirection), 0.0);
sawine@30
    57
            //vLightWeighting = uAmbientColour + uDirectionalColour * directionalLightWeighting;
sawine@30
    58
sawine@30
    59
            vec3 lightDirection = normalize(uPointLightingLocation - mvPosition.xyz);
sawine@24
    60
            vec3 transformedNormal = uNMatrix * aVertexNormal;
sawine@30
    61
            float directionalLightWeighting = max(dot(transformedNormal, lightDirection), 0.0);
sawine@30
    62
            vLightWeighting = uAmbientColour + uPointLightingColour * directionalLightWeighting;
sawine@24
    63
        }
sawine@2
    64
    }
sawine@2
    65
</script>
sawine@2
    66
</head>
sawine@2
    67
 
sawine@23
    68
<body onload="boot();">
sawine@2
    69
<canvas id="machine">
sawine@2
    70
  Download a browser with WebGL support, like Chrome or Firefox.
sawine@2
    71
</canvas>
sawine@2
    72
</body>
sawine@2
    73
 
sawine@2
    74
</html>