0
|
1 function drawObject_link(ctx, node, angle, xyz, scale, glObj){
|
|
2 // setup VBOs
|
|
3 ctx.enableVertexAttribArray(0);
|
|
4 ctx.enableVertexAttribArray(1);
|
|
5 ctx.enableVertexAttribArray(2);
|
|
6
|
|
7 ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.vertexObject);
|
|
8 ctx.vertexAttribPointer(2, 3, ctx.FLOAT, false, 0, 0);
|
|
9
|
|
10 ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.normalObject);
|
|
11 ctx.vertexAttribPointer(0, 3, ctx.FLOAT, false, 0, 0);
|
|
12
|
|
13 ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.texCoordObject);
|
|
14 ctx.vertexAttribPointer(1, 2, ctx.FLOAT, false, 0, 0);
|
|
15
|
|
16 ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, glObj.indexObject);
|
|
17
|
|
18 // generate the model-view matrix
|
|
19
|
|
20 var mvMatrix = create_matrix(node,angle, xyz, scale)
|
|
21
|
|
22 // construct the normal matrix from the model-view matrix
|
|
23 var normalMatrix = new J3DIMatrix4(mvMatrix);
|
|
24 normalMatrix.invert();
|
|
25 normalMatrix.transpose();
|
|
26 normalMatrix.setUniform(ctx, ctx.getUniformLocation(ctx.program, "u_normalMatrix"), false);
|
|
27
|
|
28
|
|
29 // construct the model-view * projection matrix
|
|
30 var mvpMatrix = new J3DIMatrix4(ctx.perspectiveMatrix);
|
|
31 mvpMatrix.multiply(mvMatrix);
|
|
32 mvpMatrix.setUniform(ctx, ctx.getUniformLocation(ctx.program, "u_modelViewProjMatrix"), false);
|
|
33
|
|
34 ctx.bindTexture(ctx.TEXTURE_2D, glObj.texture);
|
|
35 ctx.drawElements(ctx.TRIANGLES, glObj.numIndices, ctx.UNSIGNED_SHORT, 0);
|
|
36 }
|
|
37
|
|
38
|
|
39
|
|
40 create_matrix = function(node, angle, xyz, scale){
|
|
41 if(node.parents != null){
|
|
42 var mvMatrix = new J3DIMatrix4()
|
|
43 node.parents.mat.getAsArrayMatrix(mvMatrix.$matrix)
|
|
44 }else{
|
|
45 var mvMatrix = new J3DIMatrix4()
|
|
46 }
|
|
47
|
|
48 var $my_mat = new J3DIMatrix4()
|
|
49
|
|
50 //mvMatrix.translate(xyz[0],xyz[1],xyz[2])
|
|
51 //mvMatrix.quaternion(angle[0],0,1,0);
|
|
52 mvMatrix.rotate(angle[0],0,1,0);
|
|
53 mvMatrix.rotate(angle[1],1,0,0);
|
|
54 mvMatrix.rotate(angle[2],0,0,1);
|
|
55 //mvMatrix.quaternion(angle[1],1,0,0);
|
|
56 //mvMatrix.quaternion(angle[2],0,0,1);
|
|
57 //mvMatrix.rotate(angle[2],0,0,1);
|
|
58 //mvMatrix.translate(-xyz[0],-xyz[1],-xyz[2])
|
|
59
|
|
60 mvMatrix.translate(xyz[0],xyz[1],xyz[2])
|
|
61 mvMatrix.scale(scale, scale, scale)
|
|
62 mvMatrix.getAsArrayMatrix($my_mat.$matrix)
|
|
63 node.mat = $my_mat
|
|
64 //hand_mat(node)
|
|
65
|
|
66 return node.mat
|
|
67 }
|
|
68
|
|
69
|
|
70
|
|
71
|