0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 function loadObjXml(gl,url)
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 {
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 if(gl.obj == undefined) gl.obj = new Object();
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 var xmlChara = new Object();
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 xmlChara = parseObj(url);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 for (var name in xmlChara)
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 {
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 gl.obj[name] = makeXmlObj(gl, xmlChara[name]);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 gl.obj[name].texture = loadImageTexture(gl, xmlChara[name].image);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14 }
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 }
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 function PutSpriteF(ctx, x, y, scale, glObj)
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 {
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 PutSpriteA(ctx,x,y,10, scale, 0, glObj);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 }
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 function PutSpriteA(ctx, x, y, z, scale, angle, glObj)
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 {
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 // setup VBOs
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 ctx.enableVertexAttribArray(0);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 ctx.enableVertexAttribArray(1);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 ctx.enableVertexAttribArray(2);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.vertexObject);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31 ctx.vertexAttribPointer(2, 3, ctx.FLOAT, false, 0, 0);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.normalObject);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 ctx.vertexAttribPointer(0, 3, ctx.FLOAT, false, 0, 0);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35 ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.texCoordObject);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36 ctx.vertexAttribPointer(1, 2, ctx.FLOAT, false, 0, 0);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38 ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, glObj.indexObject);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 // generate the model-view matrix
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41 var mvMatrix = new J3DIMatrix4();
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 mvMatrix.translate( x, y, z);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 mvMatrix.scale(scale, scale, scale);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 mvMatrix.rotate(angle, 0, 0, 1);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 // construct the normal matrix from the model-view matrix
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 var normalMatrix = new J3DIMatrix4(mvMatrix);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 normalMatrix.invert();
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 normalMatrix.transpose();
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50 normalMatrix.setUniform(ctx, ctx.getUniformLocation(ctx.program, "u_normalMatrix"), false);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52 // construct the model-view * projection matrix
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 var mvpMatrix = new J3DIMatrix4(ctx.perspectiveMatrix);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 mvpMatrix.multiply(mvMatrix);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 mvpMatrix.setUniform(ctx, ctx.getUniformLocation(ctx.program, "u_modelViewProjMatrix"), false);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 ctx.bindTexture(ctx.TEXTURE_2D, glObj.texture);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 ctx.drawElements(ctx.TRIANGLES, glObj.numIndices, ctx.UNSIGNED_SHORT, 0);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 }
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 // matrix version
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 function PutSpriteV(ctx, x, y, z, scale, matrix, glObj)
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 {
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 // setup VBOs
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 ctx.enableVertexAttribArray(0);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 ctx.enableVertexAttribArray(1);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 ctx.enableVertexAttribArray(2);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.vertexObject);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74 ctx.vertexAttribPointer(2, 3, ctx.FLOAT, false, 0, 0);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.normalObject);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 ctx.vertexAttribPointer(0, 3, ctx.FLOAT, false, 0, 0);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.texCoordObject);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 ctx.vertexAttribPointer(1, 2, ctx.FLOAT, false, 0, 0);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, glObj.indexObject);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83 // generate the model-view matrix
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 var mvMatrix = new J3DIMatrix4();
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 mvMatrix.translate( x, y, z);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 mvMatrix.scale(scale, scale, scale);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 mvMatrix.multiply(matrix);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 // construct the normal matrix from the model-view matrix
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 var normalMatrix = new J3DIMatrix4(mvMatrix);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91 normalMatrix.invert();
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 normalMatrix.transpose();
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 normalMatrix.setUniform(ctx, ctx.getUniformLocation(ctx.program, "u_normalMatrix"), false);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 // construct the model-view * projection matrix
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96 var mvpMatrix = new J3DIMatrix4(ctx.perspectiveMatrix);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 mvpMatrix.multiply(mvMatrix);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 mvpMatrix.setUniform(ctx, ctx.getUniformLocation(ctx.program, "u_modelViewProjMatrix"), false);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 ctx.bindTexture(ctx.TEXTURE_2D, glObj.texture);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102 ctx.drawElements(ctx.TRIANGLES, glObj.numIndices, ctx.UNSIGNED_SHORT, 0);
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104 } |