scripts/cube.js
author Eugen Sawin <sawine@me73.com>
Wed, 27 Apr 2011 15:13:34 +0200
changeset 34 f471c01dca99
parent 25 3b66f92dbc4d
child 35 7769f6e1e2c5
permissions -rw-r--r--
Increasing viewport.
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@28
    23
sawine@24
    24
function Cube(size, context)
sawine@24
    25
{
sawine@24
    26
    var gl = context.gl;
sawine@28
    27
    this.size = size || 1;    
sawine@24
    28
    this.positionBuffer = gl.createBuffer();
sawine@24
    29
    gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);
sawine@24
    30
    var vertices = [
sawine@24
    31
	     // Front face
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
            -1.0,  1.0,  1.0,
sawine@24
    36
 
sawine@24
    37
            // Back face
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
             1.0, -1.0, -1.0,
sawine@24
    42
 
sawine@24
    43
            // Top face
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
             1.0,  1.0, -1.0,
sawine@24
    48
 
sawine@24
    49
            // Bottom face
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
            -1.0, -1.0,  1.0,
sawine@24
    54
 
sawine@24
    55
            // Right face
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
             1.0, -1.0,  1.0,
sawine@24
    60
 
sawine@24
    61
            // Left face
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
            -1.0,  1.0, -1.0];
sawine@24
    66
    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
sawine@24
    67
    this.positionBuffer.itemSize = 3;
sawine@24
    68
    this.positionBuffer.numItems = 24;
sawine@24
    69
sawine@25
    70
    this.normalBuffer = gl.createBuffer();
sawine@25
    71
    gl.bindBuffer(gl.ARRAY_BUFFER, this.normalBuffer);
sawine@25
    72
    var normals = [// font face
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
		   0.0, 0.0, 1.0,
sawine@25
    77
		   // back face
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
		   0.0, 0.0, -1.0,
sawine@25
    82
		   // top face
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
		   0.0, 1.0, 0.0,
sawine@25
    87
		   // bottom face
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
		   0.0, -1.0, 0.0,
sawine@25
    92
		   // right face
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
		   1.0, 0.0, 0.0,
sawine@25
    97
		   // left face
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
		   -1.0, 0.0, 0.0];
sawine@25
   102
    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(normals), gl.STATIC_DRAW);
sawine@25
   103
    this.normalBuffer.itemSize = 3;
sawine@25
   104
    this.normalBuffer.numItems = 24;
sawine@25
   105
sawine@24
   106
    this.colourBuffer = gl.createBuffer();
sawine@24
   107
    gl.bindBuffer(gl.ARRAY_BUFFER, this.colourBuffer);
sawine@24
   108
    var alpha = 1.0;
sawine@25
   109
    var uni = [1.0, 1.0, 1.0, alpha];
sawine@25
   110
    var colours = [[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@25
   115
		   [0.0, 0.0, 0.0, alpha]];
sawine@24
   116
    var unpackedColours = [];
sawine@24
   117
    for (var i in colours)
sawine@24
   118
    {
sawine@25
   119
	var colour = uni;//colours[i];
sawine@24
   120
	for (var j = 0; j < 4; j++)
sawine@24
   121
	{
sawine@24
   122
	    unpackedColours = unpackedColours.concat(colour);
sawine@24
   123
	}
sawine@24
   124
	//colours = colours.concat([0.5, 0.5, 1.0, 1.0]);
sawine@24
   125
    }
sawine@24
   126
    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(unpackedColours), gl.STATIC_DRAW);
sawine@24
   127
    this.colourBuffer.itemSize = 4;
sawine@24
   128
    this.colourBuffer.numItems = 24;
sawine@24
   129
sawine@24
   130
    this.indexBuffer = gl.createBuffer();
sawine@24
   131
    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
sawine@24
   132
    var indices = [0, 1, 2, 0, 2, 3,
sawine@24
   133
		   4, 5, 6, 4, 6, 7,
sawine@24
   134
		   8, 9, 10, 8, 10, 11,
sawine@24
   135
		   12, 13, 14, 12, 14, 15,
sawine@24
   136
		   16, 17, 18, 16, 18, 19,
sawine@24
   137
		   20, 21, 22, 20, 22, 23];
sawine@24
   138
    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
sawine@24
   139
    this.indexBuffer.itemSize = 1;
sawine@24
   140
    this.indexBuffer.numItems = 36;
sawine@24
   141
}