0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 <html>
|
1
|
2 <head>
|
|
3 <title>WebGL fps</title>
|
|
4 <script src="resources/J3DI.js"> </script>
|
|
5 <script src="resources/J3DIMath.js"> </script>
|
|
6 <script src="resources/parse.js"> </script>
|
|
7 <script src="resources/makePanel.js"> </script>
|
|
8 <script src="resources/jkl-parsexml.js"> </script>
|
|
9 <script src="resources/keyboard.js"> </script>
|
|
10 <script src="resources/mouse.js"> </script>
|
|
11 </head>
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12
|
1
|
13 <script id="vshader" type="x-shader/x-vertex">
|
|
14 uniform mat4 u_modelViewProjMatrix;
|
|
15 uniform mat4 u_normalMatrix;
|
|
16 uniform vec3 lightDir;
|
|
17
|
|
18 attribute vec3 vNormal;
|
|
19 attribute vec4 vTexCoord;
|
|
20 attribute vec4 vPosition;
|
|
21
|
|
22 varying float v_Dot;
|
|
23 varying vec2 v_texCoord;
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24
|
1
|
25 void main()
|
|
26 {
|
|
27 gl_Position = u_modelViewProjMatrix * vPosition;
|
|
28 v_texCoord = vTexCoord.st;
|
|
29 vec4 transNormal = u_normalMatrix * vec4(vNormal,1);
|
|
30 v_Dot = max(dot(transNormal.xyz, lightDir), 0.0);
|
|
31 }
|
|
32 </script>
|
|
33
|
|
34 <script id="fshader" type="x-shader/x-fragment">
|
|
35 #ifdef GL_ES
|
|
36 precision mediump float;
|
|
37 #endif
|
|
38
|
|
39 uniform sampler2D sampler2d;
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40
|
1
|
41 varying float v_Dot;
|
|
42 varying vec2 v_texCoord;
|
|
43
|
|
44 void main()
|
|
45 {
|
|
46 vec4 color = texture2D(sampler2d,v_texCoord);
|
|
47 color += vec4(0.1,0.1,0.1,1);
|
|
48 // if(color.a == 1.0)color=vec4(1,0,0,1);
|
|
49 // else color=vec4(0,1,1,1);
|
|
50 gl_FragColor = vec4(color.xyz * v_Dot, color.a);
|
|
51 // gl_FragColor = vec4(color.xyz * v_Dot, 0.5);
|
|
52 }
|
|
53 </script>
|
|
54
|
|
55
|
|
56 <script>
|
|
57 //画面(canvas)の大きさ
|
|
58 var w = 1024;
|
|
59 var h = 640;
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60
|
1
|
61 //var mvMatrix = mat4.create();
|
|
62
|
|
63
|
|
64 function init()
|
|
65 {
|
|
66 gl = initWebGL("game", "vshader", "fshader",
|
|
67 [ "vNormal", "vTexCoord", "vPosition"],
|
|
68 [ 0, 0, 0, 1 ], 10000);
|
|
69
|
|
70 gl.uniform3f(gl.getUniformLocation(gl.program, "lightDir"), 1, 1, 1);
|
|
71 gl.uniform1i(gl.getUniformLocation(gl.program, "sampler2d"), 0);
|
|
72
|
|
73 gl.enable(gl.TEXTURE_2D);
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74
|
1
|
75 modelMap = new XMLModelMap(gl);
|
|
76 modelMap.load("./xml/cube.xml");
|
|
77 object = modelMap["Cube"];
|
|
78 object2 = modelMap["Cube"];
|
|
79 object3 = modelMap["Cube"];
|
|
80
|
|
81 modelMap.load("./xml/underwall.xml");
|
|
82 object4 = modelMap["UnderWall"];
|
|
83
|
|
84 return gl;
|
|
85 }
|
|
86
|
|
87 function XMLModelMap(gl) {
|
|
88 this.gl = gl;
|
|
89 }
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90
|
1
|
91 XMLModelMap.prototype.load = function(file) {
|
|
92 var data = parseObj(file);
|
|
93 if(!data) return;
|
|
94 for(var name in data) {
|
|
95 this[name] = makeXmlObj(gl,data[name]);
|
|
96 this[name].texture = loadImageTexture(this.gl, data[name].image);
|
|
97 }
|
|
98 }
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99
|
1
|
100 /* translate */
|
|
101 xPos = 0;
|
|
102 yPos = 0;
|
|
103 zPos = 0;
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
104
|
1
|
105 /* rotate */
|
|
106 xRool = 0;
|
|
107 yRool = 0;
|
|
108 zRool = 0;
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109
|
1
|
110 /* moving late */
|
|
111 speedX = 0;
|
|
112 speedZ = 0;
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113
|
1
|
114 /* rotating late */
|
|
115 //rotateX = 0;
|
|
116 //rotateY = 0;
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117
|
1
|
118 yaw = 0;
|
|
119 yawRate = 0;
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121
|
1
|
122 function reshape(ctx, ortho)
|
|
123 {
|
|
124 var canvas = document.getElementById('game');
|
|
125
|
|
126 width = canvas.width;
|
|
127 height = canvas.height;
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128
|
1
|
129 ctx.viewport(0, 0, width, height);
|
|
130
|
|
131 var t = width/height;
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132
|
1
|
133 ctx.perspectiveMatrix = new J3DIMatrix4();
|
|
134 ctx.perspectiveMatrix.frustum(-0.5, 0.5, -0.5 / t, 0.5 / t, 1, 100000);
|
|
135 }
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137
|
2
|
138 function setCamera(ctx){
|
3
|
139 ctx.viewport(0, 0, width, height);
|
2
|
140
|
|
141 var t = width/height;
|
|
142
|
|
143 ctx.perspectiveMatrix.makeIdentity();
|
|
144 ctx.perspectiveMatrix.frustum(-0.5, 0.5, -0.5 / t, 0.5 / t, 1, 100000);
|
|
145
|
3
|
146 var x = Math.cos((angle+90)*Math.PI/180 );
|
|
147 var z = Math.sin((angle+90)*Math.PI/180 );
|
2
|
148
|
3
|
149 cameraX += x * speedZ;
|
|
150 cameraZ += z * speedZ;
|
2
|
151
|
3
|
152 ctx.perspectiveMatrix.rotate(angle,0,1,0);
|
|
153 ctx.perspectiveMatrix.translate(cameraX,0,cameraZ);
|
|
154
|
2
|
155 }
|
|
156
|
3
|
157 angle = 0;
|
|
158 cameraX = 0;
|
|
159 cameraZ = 0;
|
2
|
160
|
1
|
161 FILPCOUNT = 0;
|
|
162 function loop(ctx, ortho)
|
|
163 {
|
|
164 ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT);
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
165
|
3
|
166 setCamera(ctx);
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
167
|
1
|
168 PutSpriteV(ctx, cube_X, cube_Y, cube_Z, 1, matrix, object);
|
|
169 PutSpriteV(ctx, cube_X2, cube_Y2, cube_Z2, 1, matrix, object2);
|
|
170 PutSpriteV(ctx, cube_X3, cube_Y3, cube_Z3, 1, matrix, object3);
|
|
171 PutSpriteV(ctx, ground_X, ground_Y, ground_Z, 2, matrix2, object4);
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
172
|
1
|
173 move();
|
|
174 ctx.flush();
|
|
175
|
|
176 FILPCOUNT++;
|
|
177 framerate.snapshot();
|
|
178 }
|
|
179
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
180
|
1
|
181 function opening(ctx, ortho)
|
|
182 {
|
|
183 reshape(ctx, ortho);
|
|
184 ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT);
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
185
|
1
|
186 ctx.flush();
|
|
187 var f = function() { loop(ctx, ortho); };
|
|
188 setInterval(f, 10);
|
|
189 }
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
190
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
191
|
1
|
192 // display size
|
|
193 var W = 1024;
|
|
194 var H = 640;
|
|
195
|
|
196 function start()
|
|
197 {
|
|
198 var ortho = {left:0, right:200, bottom:140, top:0}
|
|
199 matrix = new J3DIMatrix4(); // global variable
|
|
200 matrix2 = new J3DIMatrix4(); // global variable
|
2
|
201
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
202
|
1
|
203 cube_X = 0;
|
|
204 cube_Y = 0;
|
|
205 cube_Z = -10;
|
|
206
|
|
207 cube_X2 = 5;
|
|
208 cube_Y2 = 0;
|
|
209 cube_Z2 = -10;
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
210
|
1
|
211 cube_X3 = -5;
|
|
212 cube_Y3 = 0;
|
|
213 cube_Z3 = -10;
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
214
|
1
|
215 ground_X = 0;
|
|
216 ground_Y = 15;
|
|
217 ground_Z = -50;
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
218
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
219
|
1
|
220 // var c = document.getElementById("game");
|
|
221 // c.width = W;
|
|
222 // c.height = H;
|
|
223
|
|
224 var ctx = init();
|
|
225 //var ctx2 = init("./xml/sphere.xml","Sphere")
|
|
226
|
|
227 o = function() {opening(ctx, ortho);};
|
|
228 setTimeout(o, 10);
|
|
229 framerate = new Framerate("framerate");
|
|
230 }
|
|
231
|
|
232
|
|
233 function loadFile(objectname)
|
|
234 {
|
|
235 var filename = "./xml/"+objectname+".xml";
|
|
236 modelMap.load(filename);
|
|
237 //console.log(filename);
|
|
238 object = modelMap[objectname];
|
|
239 }
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
240
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
241 function objToString(obj,map,indent){
|
1
|
242 indent=indent?indent+"\t":"";if(!map)map={};
|
|
243 if(map[obj])return;
|
|
244 map[obj]=true;
|
|
245 if(typeof obj=="string"||typeof obj=="number"||typeof obj=="boolena")return indent+obj;
|
|
246 if(typeof obj=="array"){
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
247
|
1
|
248 for(var i=0,s="";i < obj.length;i++ )s+=objToString(obj[i],map,indent)+",";
|
|
249 return indent+"["+s+"]";
|
|
250 }
|
|
251 var s="";for(var i in obj)s+=indent+"\t"+i+":"+objToString(obj[i],map)+"\n";return indent+"{"+s+"}";
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
252 }
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
253
|
1
|
254 </script>
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
255
|
1
|
256 <body onload="start()" onkeydown="keyboardDown()" onkeypress="keyboardPress()" onkeyup="keyboardUp()" onmousedown="mouseDown();" onmouseup="mouseUp();" style='overflow:hidden; '>
|
|
257 <canvas id="game" width=1024 height=640 >
|
|
258 </canvas>
|
|
259 <form onsubmit="loadFile(document.getElementById('filename').value);return false;">
|
|
260 <input type="text" id="filename" value="Cube">
|
|
261 </form>
|
|
262 <div id="framerate"></div>
|
|
263 <div id="console"></div>
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
264
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
265
|
1
|
266 </body>
|
0
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
267
|
Syusaku Morita <e105716@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
268 </html>
|