scripts/cube.js
author Eugen Sawin <sawine@me73.com>
Sat, 30 Apr 2011 04:16:57 +0200
changeset 37 97af0c060479
parent 35 7769f6e1e2c5
permissions -rw-r--r--
Added mipmapping.
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@36
    23
function CubeVbo(size, context, texture)
sawine@24
    24
{
sawine@24
    25
    var gl = context.gl;
sawine@36
    26
    this.texture = texture;
sawine@36
    27
    this.useTexture = texture;
sawine@28
    28
    this.size = size || 1;    
sawine@24
    29
    this.positionBuffer = gl.createBuffer();
sawine@24
    30
    gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);
sawine@24
    31
    var vertices = [
sawine@24
    32
	     // Front face
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
            -1.0,  1.0,  1.0,
sawine@24
    37
 
sawine@24
    38
            // Back face
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
             1.0, -1.0, -1.0,
sawine@24
    43
 
sawine@24
    44
            // Top face
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
             1.0,  1.0, -1.0,
sawine@24
    49
 
sawine@24
    50
            // Bottom face
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
            -1.0, -1.0,  1.0,
sawine@24
    55
 
sawine@24
    56
            // Right face
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
             1.0, -1.0,  1.0,
sawine@24
    61
 
sawine@24
    62
            // Left face
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
            -1.0,  1.0, -1.0];
sawine@24
    67
    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
sawine@24
    68
    this.positionBuffer.itemSize = 3;
sawine@24
    69
    this.positionBuffer.numItems = 24;
sawine@24
    70
sawine@25
    71
    this.normalBuffer = gl.createBuffer();
sawine@25
    72
    gl.bindBuffer(gl.ARRAY_BUFFER, this.normalBuffer);
sawine@25
    73
    var normals = [// font face
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
		   0.0, 0.0, 1.0,
sawine@25
    78
		   // back face
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
		   0.0, 0.0, -1.0,
sawine@25
    83
		   // top face
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
		   0.0, 1.0, 0.0,
sawine@25
    88
		   // bottom face
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
		   0.0, -1.0, 0.0,
sawine@25
    93
		   // right face
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
		   1.0, 0.0, 0.0,
sawine@25
    98
		   // left face
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
		   -1.0, 0.0, 0.0];
sawine@25
   103
    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(normals), gl.STATIC_DRAW);
sawine@25
   104
    this.normalBuffer.itemSize = 3;
sawine@25
   105
    this.normalBuffer.numItems = 24;
sawine@25
   106
sawine@36
   107
    //if (this.texture)
sawine@36
   108
    //{
sawine@36
   109
	this.textureCoordBuffer = gl.createBuffer();
sawine@36
   110
	gl.bindBuffer(gl.ARRAY_BUFFER, this.textureCoordBuffer);
sawine@36
   111
	var textureCoords = [// front face
sawine@36
   112
	    0.0, 0.0,
sawine@36
   113
	    1.0, 0.0,
sawine@36
   114
	    1.0, 1.0,
sawine@36
   115
	    0.0, 1.0,
sawine@36
   116
	    //back face
sawine@36
   117
	    1.0, 0.0,
sawine@36
   118
	    1.0, 1.0,
sawine@36
   119
	    0.0, 1.0,
sawine@36
   120
	    0.0, 0.0,
sawine@36
   121
	    // top face
sawine@36
   122
	    0.0, 1.0,
sawine@36
   123
	    0.0, 0.0,
sawine@36
   124
	    1.0, 0.0,
sawine@36
   125
	    1.0, 1.0,
sawine@36
   126
	    // bottom face
sawine@36
   127
	    1.0, 1.0,
sawine@36
   128
	    0.0, 1.0,
sawine@36
   129
	    0.0, 0.0,
sawine@36
   130
	    1.0, 0.0,
sawine@36
   131
	    // right face
sawine@36
   132
	    1.0, 0.0, 
sawine@36
   133
	    1.0, 1.0,
sawine@36
   134
	    0.0, 1.0,
sawine@36
   135
	    0.0, 0.0,
sawine@36
   136
	    // left face
sawine@36
   137
	    0.0, 0.0,
sawine@36
   138
	    1.0, 0.0,
sawine@36
   139
	    1.0, 1.0,
sawine@36
   140
	    0.0, 1.0];
sawine@36
   141
	gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(textureCoords), gl.STATIC_DRAW);
sawine@36
   142
	this.textureCoordBuffer.itemSize = 2;
sawine@36
   143
	this.textureCoordBuffer.numItems = 24;
sawine@36
   144
    //}
sawine@36
   145
   
sawine@24
   146
    this.colourBuffer = gl.createBuffer();
sawine@24
   147
    gl.bindBuffer(gl.ARRAY_BUFFER, this.colourBuffer);
sawine@24
   148
    var alpha = 1.0;
sawine@25
   149
    var uni = [1.0, 1.0, 1.0, alpha];
sawine@25
   150
    var colours = [[0.0, 0.0, 0.0, alpha],
sawine@25
   151
		   [0.0, 0.0, 0.0, alpha],
sawine@25
   152
		   [0.0, 0.0, 0.0, alpha],
sawine@25
   153
		   [0.0, 0.0, 0.0, alpha],
sawine@25
   154
		   [0.0, 0.0, 0.0, alpha],
sawine@25
   155
		   [0.0, 0.0, 0.0, alpha]];
sawine@24
   156
    var unpackedColours = [];
sawine@24
   157
    for (var i in colours)
sawine@24
   158
    {
sawine@25
   159
	var colour = uni;//colours[i];
sawine@24
   160
	for (var j = 0; j < 4; j++)
sawine@24
   161
	{
sawine@24
   162
	    unpackedColours = unpackedColours.concat(colour);
sawine@24
   163
	}
sawine@24
   164
	//colours = colours.concat([0.5, 0.5, 1.0, 1.0]);
sawine@24
   165
    }
sawine@24
   166
    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(unpackedColours), gl.STATIC_DRAW);
sawine@24
   167
    this.colourBuffer.itemSize = 4;
sawine@24
   168
    this.colourBuffer.numItems = 24;
sawine@36
   169
    
sawine@24
   170
    this.indexBuffer = gl.createBuffer();
sawine@24
   171
    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
sawine@24
   172
    var indices = [0, 1, 2, 0, 2, 3,
sawine@24
   173
		   4, 5, 6, 4, 6, 7,
sawine@24
   174
		   8, 9, 10, 8, 10, 11,
sawine@24
   175
		   12, 13, 14, 12, 14, 15,
sawine@24
   176
		   16, 17, 18, 16, 18, 19,
sawine@24
   177
		   20, 21, 22, 20, 22, 23];
sawine@24
   178
    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
sawine@24
   179
    this.indexBuffer.itemSize = 1;
sawine@24
   180
    this.indexBuffer.numItems = 36;
sawine@35
   181
}
sawine@35
   182
sawine@35
   183
var id = 0;
sawine@35
   184
function Cube(vbo)
sawine@35
   185
{
sawine@35
   186
    this.id = id++;
sawine@35
   187
    this.vbo = vbo;
sawine@24
   188
}