machine.html
author Eugen Sawin <sawine@me73.com>
Sat, 30 Apr 2011 04:05:47 +0200
changeset 36 a828c4cde5b3
parent 33 2af408534f28
child 37 97af0c060479
permissions -rwxr-xr-x
Added optional texturing.
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@36
    15
    varying vec2 vTextureCoord;
sawine@31
    16
    varying vec3 vTransformedNormal;
sawine@31
    17
    varying vec4 vPosition;
sawine@31
    18
sawine@33
    19
    uniform float uMaterialShininess;
sawine@33
    20
sawine@31
    21
    uniform bool uUseLighting;
sawine@36
    22
    uniform bool uUseTexture;
sawine@36
    23
sawine@36
    24
    uniform sampler2D uSampler;
sawine@31
    25
   
sawine@31
    26
    uniform vec3 uAmbientColour;
sawine@31
    27
    uniform vec3 uPointLightingLocation;
sawine@33
    28
    uniform vec3 uPointLightingSpecularColour;
sawine@33
    29
    uniform vec3 uPointLightingDiffuseColour;
sawine@2
    30
 
sawine@31
    31
    void main(void)
sawine@4
    32
    {
sawine@31
    33
        vec3 lightWeighting;
sawine@31
    34
        if (!uUseLighting) 
sawine@31
    35
        {
sawine@31
    36
            lightWeighting = vec3(1.0, 1.0, 1.0);
sawine@31
    37
        }
sawine@31
    38
        else
sawine@31
    39
        {
sawine@31
    40
            vec3 lightDirection = normalize(uPointLightingLocation - vPosition.xyz);
sawine@33
    41
            vec3 normal = normalize(vTransformedNormal);
sawine@33
    42
            vec3 eyeDirection = normalize(-vPosition.xyz);
sawine@33
    43
            vec3 reflectionDirection = reflect(-lightDirection, normal);
sawine@33
    44
            float specularLightWeighting = pow(max(dot(reflectionDirection, eyeDirection), 0.0), uMaterialShininess);
sawine@33
    45
            float diffuseLightWeighting = max(dot(normal, lightDirection), 0.0);
sawine@33
    46
            lightWeighting = uAmbientColour + uPointLightingSpecularColour * specularLightWeighting
sawine@33
    47
                             + uPointLightingDiffuseColour * diffuseLightWeighting;
sawine@36
    48
        }  
sawine@36
    49
        if (uUseTexture)
sawine@36
    50
        {
sawine@36
    51
            vec4 colour = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));
sawine@36
    52
            gl_FragColor = vec4(colour.rgb * lightWeighting, colour.a);
sawine@36
    53
        }
sawine@36
    54
        else
sawine@36
    55
        {
sawine@36
    56
            gl_FragColor = vec4(vColour.rgb * lightWeighting, vColour.a);
sawine@36
    57
        }
sawine@2
    58
    }
sawine@2
    59
</script> 
sawine@2
    60
 
sawine@2
    61
<script id="vertex-shader" type="x-shader/x-vertex"> 
sawine@2
    62
    attribute vec3 aVertexPosition;
sawine@24
    63
    attribute vec3 aVertexNormal;
sawine@25
    64
    attribute vec4 aVertexColour;    
sawine@36
    65
    attribute vec2 aTextureCoord;
sawine@4
    66
sawine@2
    67
    uniform mat4 uMVMatrix;
sawine@2
    68
    uniform mat4 uPMatrix;
sawine@24
    69
    uniform mat3 uNMatrix;
sawine@24
    70
sawine@4
    71
    varying vec4 vColour;
sawine@36
    72
    varying vec2 vTextureCoord;
sawine@31
    73
    varying vec3 vTransformedNormal;
sawine@31
    74
    varying vec4 vPosition;
sawine@2
    75
 
sawine@4
    76
    void main(void) 
sawine@4
    77
    {
sawine@31
    78
        vPosition = uMVMatrix * vec4(aVertexPosition, 1.0);
sawine@31
    79
        gl_Position = uPMatrix * vPosition;
sawine@4
    80
        vColour = aVertexColour;
sawine@36
    81
        vTextureCoord = aTextureCoord;
sawine@31
    82
        vTransformedNormal = uNMatrix * aVertexNormal;
sawine@2
    83
    }
sawine@2
    84
</script>
sawine@2
    85
</head>
sawine@2
    86
 
sawine@23
    87
<body onload="boot();">
sawine@2
    88
<canvas id="machine">
sawine@2
    89
  Download a browser with WebGL support, like Chrome or Firefox.
sawine@2
    90
</canvas>
sawine@2
    91
</body>
sawine@2
    92
 
sawine@2
    93
</html>