OLD | NEW |
| (Empty) |
1 tdl.require('tdl.buffers'); | |
2 tdl.require('tdl.fast'); | |
3 tdl.require('tdl.log'); | |
4 tdl.require('tdl.math'); | |
5 tdl.require('tdl.models'); | |
6 tdl.require('tdl.primitives'); | |
7 tdl.require('tdl.programs'); | |
8 tdl.require('tdl.textures'); | |
9 tdl.require('tdl.webgl'); | |
10 | |
11 function setupLogo() { | |
12 var program = tdl.programs.loadProgramFromScriptTags( | |
13 'modelVertexShader', | |
14 'modelFragmentShader'); | |
15 var arrays = { | |
16 position: new tdl.primitives.AttribBuffer( | |
17 3, [ | |
18 -1, -1, -1, | |
19 1, -1, -1, | |
20 1, 1, -1, | |
21 -1, 1, -1, | |
22 -1, -1, 1, | |
23 1, -1, 1, | |
24 1, 1, 1, | |
25 -1, 1, 1 | |
26 ]), | |
27 indices: new tdl.primitives.AttribBuffer(2, [ | |
28 0, 1, 1, 2, 2, 3, 3, 0, | |
29 4, 5, 5, 6, 6, 7, 7, 4, | |
30 0, 4, 1, 5, 2, 6, 3, 7 | |
31 ], 'Uint16Array') | |
32 }; | |
33 return new tdl.models.Model(program, arrays, {}, gl.LINES); | |
34 }; | |
35 | |
36 var g_eyeSpeed = 1; | |
37 var g_eyeHeight = 4.5; | |
38 var g_eyeRadius = 5; | |
39 var g_fov = 30; | |
40 var g_trans = [0,0,0]; | |
41 | |
42 function initializeLogo(canvas) { | |
43 var math = tdl.math; | |
44 var fast = tdl.fast; | |
45 var model = setupLogo(); | |
46 | |
47 var clock = 0.0; | |
48 | |
49 // pre-allocate a bunch of arrays | |
50 var projection = new Float32Array(16); | |
51 var view = new Float32Array(16); | |
52 var world = new Float32Array(16); | |
53 var worldInverse = new Float32Array(16); | |
54 var worldInverseTranspose = new Float32Array(16); | |
55 var viewProjection = new Float32Array(16); | |
56 var worldViewProjection = new Float32Array(16); | |
57 var eyePosition = new Float32Array(3); | |
58 var target = new Float32Array(3); | |
59 var up = new Float32Array([0,1,0]); | |
60 var v3t0 = new Float32Array(3); | |
61 var v3t1 = new Float32Array(3); | |
62 var v3t2 = new Float32Array(3); | |
63 var v3t3 = new Float32Array(3); | |
64 var m4t0 = new Float32Array(16); | |
65 var m4t1 = new Float32Array(16); | |
66 var m4t2 = new Float32Array(16); | |
67 var m4t3 = new Float32Array(16); | |
68 var zero4 = new Float32Array(4); | |
69 var one4 = new Float32Array([1,1,1,1]); | |
70 | |
71 // uniforms. | |
72 var modelConst = { | |
73 }; | |
74 var modelPer = { | |
75 worldViewProjection: worldViewProjection | |
76 }; | |
77 | |
78 var then = (new Date()).getTime() * 0.001; | |
79 function render() { | |
80 tdl.webgl.requestAnimationFrame(render, canvas); | |
81 var now = (new Date()).getTime() * 0.001; | |
82 var elapsedTime = now - then; | |
83 then = now; | |
84 | |
85 clock += elapsedTime; | |
86 eyePosition[0] = Math.sin(clock * g_eyeSpeed) * g_eyeRadius; | |
87 eyePosition[1] = g_eyeHeight; | |
88 eyePosition[2] = Math.cos(clock * g_eyeSpeed) * g_eyeRadius; | |
89 | |
90 gl.colorMask(true, true, true, true); | |
91 gl.depthMask(true); | |
92 gl.clearColor(0,0,0,0); | |
93 gl.clearDepth(1); | |
94 gl.lineWidth(2); | |
95 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT); | |
96 | |
97 gl.enable(gl.CULL_FACE); | |
98 gl.enable(gl.DEPTH_TEST); | |
99 //gl.enable(gl.BLEND); | |
100 //gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); | |
101 | |
102 fast.matrix4.perspective( | |
103 projection, | |
104 math.degToRad(g_fov), | |
105 canvas.clientWidth / canvas.clientHeight, | |
106 1, | |
107 5000); | |
108 fast.matrix4.lookAt( | |
109 view, | |
110 eyePosition, | |
111 target, | |
112 up); | |
113 fast.matrix4.mul(viewProjection, view, projection); | |
114 | |
115 model.drawPrep(modelConst); | |
116 fast.matrix4.translation(world, g_trans); | |
117 fast.matrix4.mul(worldViewProjection, world, viewProjection); | |
118 model.draw(modelPer); | |
119 } | |
120 render(); | |
121 } | |
122 | |
OLD | NEW |