UNPKG

1.51 kBJavaScriptView Raw
1'use strict'
2
3var glslify = require('glslify')
4var drawTriangle = require('a-big-triangle')
5
6var createShader = glslify({
7 vert: '\
8attribute vec2 position;\
9varying vec2 uv;\
10void main() {\
11 uv = position;\
12 gl_Position = vec4(position,0,1);\
13}',
14 frag: '\
15precision mediump float;\n\
16#pragma glslify: specular = require(../index.glsl)\n\
17varying vec2 uv;\n\
18uniform vec3 lightPosition;\n\
19void main() {\n\
20 float r = sqrt(dot(uv,uv));\
21 float theta = atan(uv.y,uv.x);\
22 float phi = asin(r);\
23 vec3 normal = vec3(\
24 cos(theta)*sin(phi),\
25 sin(theta)*sin(phi),\
26 -cos(phi));\n\
27 vec3 position = vec3(normal.xy, normal.z+5.0);\
28 vec3 lightDir = normalize(lightPosition - position);\
29 vec3 eyeDir = normalize(-position);\
30 float power = specular(lightDir, eyeDir, normal, 0.1);\n\
31 if(r > 1.0) {\n\
32 gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0);\n\
33 } else {\n\
34 gl_FragColor = vec4(power,power,power, 1.0);\n\
35 }\n\
36}',
37 inline: true
38})
39
40var canvas = document.createElement('canvas')
41canvas.width = window.innerWidth
42canvas.height = window.innerHeight
43canvas.style.left = "0px"
44canvas.style.top = "0px"
45canvas.style.position = "absolute"
46document.body.appendChild(canvas)
47
48var gl = canvas.getContext('webgl')
49var shader = createShader(gl)
50
51function render() {
52 shader.bind()
53 var theta = Date.now()*0.0005
54 var x = Math.cos(theta)
55 var y = Math.sin(theta)
56 shader.uniforms.lightPosition = [30.0*x, 10.0, 30.0*y]
57 drawTriangle(gl)
58 requestAnimationFrame(render)
59}
60
61render()
\No newline at end of file