sawine@28
|
1 |
function Node(position, rotation, geometry)
|
sawine@28
|
2 |
{
|
sawine@28
|
3 |
this.pos = position;
|
sawine@28
|
4 |
this.rot = rotation;
|
sawine@28
|
5 |
this.geometry = geometry;
|
sawine@28
|
6 |
this.children = [];
|
sawine@28
|
7 |
}
|
sawine@28
|
8 |
Node.prototype.update = function(time)
|
sawine@28
|
9 |
{
|
sawine@28
|
10 |
// this.right = [1, 0, 0];
|
sawine@28
|
11 |
// this.up = [0, 1, 0];
|
sawine@28
|
12 |
// this.target = [0, 0, -1];
|
sawine@28
|
13 |
// var x = vec3.dot([1, 0, 0], this.pos);
|
sawine@28
|
14 |
// var y = vec3.dot([0, 1, 0], this.pos);
|
sawine@28
|
15 |
// var z = vec3.dot([0, 0, -1], this.pos);
|
sawine@28
|
16 |
// this.matrix = mat4.create([this.right[0], this.up[0], -this.target[0], 0,
|
sawine@28
|
17 |
// this.right[1], this.up[1], -this.target[1], 0,
|
sawine@28
|
18 |
// this.right[2], this.up[2], -this.target[2], 0,
|
sawine@28
|
19 |
// -x, -y, z, 1]);
|
sawine@28
|
20 |
for (var id in this.children) this.children[id].update(time);
|
sawine@28
|
21 |
}
|
sawine@28
|
22 |
|
sawine@35
|
23 |
function CubeVbo(size, context)
|
sawine@24
|
24 |
{
|
sawine@24
|
25 |
var gl = context.gl;
|
sawine@28
|
26 |
this.size = size || 1;
|
sawine@24
|
27 |
this.positionBuffer = gl.createBuffer();
|
sawine@24
|
28 |
gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);
|
sawine@24
|
29 |
var vertices = [
|
sawine@24
|
30 |
// Front face
|
sawine@24
|
31 |
-1.0, -1.0, 1.0,
|
sawine@24
|
32 |
1.0, -1.0, 1.0,
|
sawine@24
|
33 |
1.0, 1.0, 1.0,
|
sawine@24
|
34 |
-1.0, 1.0, 1.0,
|
sawine@24
|
35 |
|
sawine@24
|
36 |
// Back face
|
sawine@24
|
37 |
-1.0, -1.0, -1.0,
|
sawine@24
|
38 |
-1.0, 1.0, -1.0,
|
sawine@24
|
39 |
1.0, 1.0, -1.0,
|
sawine@24
|
40 |
1.0, -1.0, -1.0,
|
sawine@24
|
41 |
|
sawine@24
|
42 |
// Top face
|
sawine@24
|
43 |
-1.0, 1.0, -1.0,
|
sawine@24
|
44 |
-1.0, 1.0, 1.0,
|
sawine@24
|
45 |
1.0, 1.0, 1.0,
|
sawine@24
|
46 |
1.0, 1.0, -1.0,
|
sawine@24
|
47 |
|
sawine@24
|
48 |
// Bottom face
|
sawine@24
|
49 |
-1.0, -1.0, -1.0,
|
sawine@24
|
50 |
1.0, -1.0, -1.0,
|
sawine@24
|
51 |
1.0, -1.0, 1.0,
|
sawine@24
|
52 |
-1.0, -1.0, 1.0,
|
sawine@24
|
53 |
|
sawine@24
|
54 |
// Right face
|
sawine@24
|
55 |
1.0, -1.0, -1.0,
|
sawine@24
|
56 |
1.0, 1.0, -1.0,
|
sawine@24
|
57 |
1.0, 1.0, 1.0,
|
sawine@24
|
58 |
1.0, -1.0, 1.0,
|
sawine@24
|
59 |
|
sawine@24
|
60 |
// Left face
|
sawine@24
|
61 |
-1.0, -1.0, -1.0,
|
sawine@24
|
62 |
-1.0, -1.0, 1.0,
|
sawine@24
|
63 |
-1.0, 1.0, 1.0,
|
sawine@24
|
64 |
-1.0, 1.0, -1.0];
|
sawine@24
|
65 |
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
|
sawine@24
|
66 |
this.positionBuffer.itemSize = 3;
|
sawine@24
|
67 |
this.positionBuffer.numItems = 24;
|
sawine@24
|
68 |
|
sawine@25
|
69 |
this.normalBuffer = gl.createBuffer();
|
sawine@25
|
70 |
gl.bindBuffer(gl.ARRAY_BUFFER, this.normalBuffer);
|
sawine@25
|
71 |
var normals = [// font face
|
sawine@25
|
72 |
0.0, 0.0, 1.0,
|
sawine@25
|
73 |
0.0, 0.0, 1.0,
|
sawine@25
|
74 |
0.0, 0.0, 1.0,
|
sawine@25
|
75 |
0.0, 0.0, 1.0,
|
sawine@25
|
76 |
// back face
|
sawine@25
|
77 |
0.0, 0.0, -1.0,
|
sawine@25
|
78 |
0.0, 0.0, -1.0,
|
sawine@25
|
79 |
0.0, 0.0, -1.0,
|
sawine@25
|
80 |
0.0, 0.0, -1.0,
|
sawine@25
|
81 |
// top face
|
sawine@25
|
82 |
0.0, 1.0, 0.0,
|
sawine@25
|
83 |
0.0, 1.0, 0.0,
|
sawine@25
|
84 |
0.0, 1.0, 0.0,
|
sawine@25
|
85 |
0.0, 1.0, 0.0,
|
sawine@25
|
86 |
// bottom face
|
sawine@25
|
87 |
0.0, -1.0, 0.0,
|
sawine@25
|
88 |
0.0, -1.0, 0.0,
|
sawine@25
|
89 |
0.0, -1.0, 0.0,
|
sawine@25
|
90 |
0.0, -1.0, 0.0,
|
sawine@25
|
91 |
// right face
|
sawine@25
|
92 |
1.0, 0.0, 0.0,
|
sawine@25
|
93 |
1.0, 0.0, 0.0,
|
sawine@25
|
94 |
1.0, 0.0, 0.0,
|
sawine@25
|
95 |
1.0, 0.0, 0.0,
|
sawine@25
|
96 |
// left face
|
sawine@25
|
97 |
-1.0, 0.0, 0.0,
|
sawine@25
|
98 |
-1.0, 0.0, 0.0,
|
sawine@25
|
99 |
-1.0, 0.0, 0.0,
|
sawine@25
|
100 |
-1.0, 0.0, 0.0];
|
sawine@25
|
101 |
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(normals), gl.STATIC_DRAW);
|
sawine@25
|
102 |
this.normalBuffer.itemSize = 3;
|
sawine@25
|
103 |
this.normalBuffer.numItems = 24;
|
sawine@25
|
104 |
|
sawine@24
|
105 |
this.colourBuffer = gl.createBuffer();
|
sawine@24
|
106 |
gl.bindBuffer(gl.ARRAY_BUFFER, this.colourBuffer);
|
sawine@24
|
107 |
var alpha = 1.0;
|
sawine@25
|
108 |
var uni = [1.0, 1.0, 1.0, alpha];
|
sawine@25
|
109 |
var colours = [[0.0, 0.0, 0.0, alpha],
|
sawine@25
|
110 |
[0.0, 0.0, 0.0, alpha],
|
sawine@25
|
111 |
[0.0, 0.0, 0.0, alpha],
|
sawine@25
|
112 |
[0.0, 0.0, 0.0, alpha],
|
sawine@25
|
113 |
[0.0, 0.0, 0.0, alpha],
|
sawine@25
|
114 |
[0.0, 0.0, 0.0, alpha]];
|
sawine@24
|
115 |
var unpackedColours = [];
|
sawine@24
|
116 |
for (var i in colours)
|
sawine@24
|
117 |
{
|
sawine@25
|
118 |
var colour = uni;//colours[i];
|
sawine@24
|
119 |
for (var j = 0; j < 4; j++)
|
sawine@24
|
120 |
{
|
sawine@24
|
121 |
unpackedColours = unpackedColours.concat(colour);
|
sawine@24
|
122 |
}
|
sawine@24
|
123 |
//colours = colours.concat([0.5, 0.5, 1.0, 1.0]);
|
sawine@24
|
124 |
}
|
sawine@24
|
125 |
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(unpackedColours), gl.STATIC_DRAW);
|
sawine@24
|
126 |
this.colourBuffer.itemSize = 4;
|
sawine@24
|
127 |
this.colourBuffer.numItems = 24;
|
sawine@24
|
128 |
|
sawine@24
|
129 |
this.indexBuffer = gl.createBuffer();
|
sawine@24
|
130 |
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
|
sawine@24
|
131 |
var indices = [0, 1, 2, 0, 2, 3,
|
sawine@24
|
132 |
4, 5, 6, 4, 6, 7,
|
sawine@24
|
133 |
8, 9, 10, 8, 10, 11,
|
sawine@24
|
134 |
12, 13, 14, 12, 14, 15,
|
sawine@24
|
135 |
16, 17, 18, 16, 18, 19,
|
sawine@24
|
136 |
20, 21, 22, 20, 22, 23];
|
sawine@24
|
137 |
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
|
sawine@24
|
138 |
this.indexBuffer.itemSize = 1;
|
sawine@24
|
139 |
this.indexBuffer.numItems = 36;
|
sawine@35
|
140 |
}
|
sawine@35
|
141 |
|
sawine@35
|
142 |
var id = 0;
|
sawine@35
|
143 |
function Cube(vbo)
|
sawine@35
|
144 |
{
|
sawine@35
|
145 |
this.id = id++;
|
sawine@35
|
146 |
this.vbo = vbo;
|
sawine@24
|
147 |
} |