annotate Pants_FPS/PantsFPS.html @ 13:969b55da5e41

Pants
author <e085737>
date Wed, 08 Dec 2010 13:18:21 +0900
parents
children bcb6ef677b11
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13
<e085737>
parents:
diff changeset
1 <html>
<e085737>
parents:
diff changeset
2 <head>
<e085737>
parents:
diff changeset
3 <title>Earth and Mars</title>
<e085737>
parents:
diff changeset
4 <script src="resources/SceneGraphRoot.js"></script>
<e085737>
parents:
diff changeset
5 <script src="resources/SceneGraph.js"></script>
<e085737>
parents:
diff changeset
6 <script src="resources/jkl-parsexml.js"></script>
<e085737>
parents:
diff changeset
7 <script src="resources/Image_xml.js"></script>
<e085737>
parents:
diff changeset
8 <script src="resources/keybord.js"></script>
<e085737>
parents:
diff changeset
9 <script src="resources/walk.js"></script>
<e085737>
parents:
diff changeset
10 <script src="resources/bullet.js"></script>
<e085737>
parents:
diff changeset
11 <script src="resources/pants.js"></script>
<e085737>
parents:
diff changeset
12 <script src="resources/J3DI.js"> </script>
<e085737>
parents:
diff changeset
13 <script src="resources/J3DIMath.js" type="text/javascript"> </script>
<e085737>
parents:
diff changeset
14
<e085737>
parents:
diff changeset
15 <script id="vshader" type="x-shader/x-vertex">
<e085737>
parents:
diff changeset
16 uniform mat4 u_modelViewProjMatrix;
<e085737>
parents:
diff changeset
17 uniform mat4 u_normalMatrix;
<e085737>
parents:
diff changeset
18 uniform vec3 lightDir;
<e085737>
parents:
diff changeset
19
<e085737>
parents:
diff changeset
20 attribute vec3 vNormal;
<e085737>
parents:
diff changeset
21 attribute vec4 vTexCoord;
<e085737>
parents:
diff changeset
22 attribute vec4 vPosition;
<e085737>
parents:
diff changeset
23
<e085737>
parents:
diff changeset
24 varying float v_Dot;
<e085737>
parents:
diff changeset
25 varying vec2 v_texCoord;
<e085737>
parents:
diff changeset
26
<e085737>
parents:
diff changeset
27 void main()
<e085737>
parents:
diff changeset
28 {
<e085737>
parents:
diff changeset
29 gl_Position = u_modelViewProjMatrix * vPosition;
<e085737>
parents:
diff changeset
30 v_texCoord = vTexCoord.st;
<e085737>
parents:
diff changeset
31 vec4 transNormal = (u_normalMatrix) * vec4(vNormal,1);
<e085737>
parents:
diff changeset
32 v_Dot = max(dot(transNormal.xyz, lightDir), 1.0);
<e085737>
parents:
diff changeset
33 }
<e085737>
parents:
diff changeset
34 </script>
<e085737>
parents:
diff changeset
35
<e085737>
parents:
diff changeset
36 <script id="fshader" type="x-shader/x-fragment">
<e085737>
parents:
diff changeset
37 #ifdef GL_ES
<e085737>
parents:
diff changeset
38 precision mediump float;
<e085737>
parents:
diff changeset
39 #endif
<e085737>
parents:
diff changeset
40
<e085737>
parents:
diff changeset
41 uniform sampler2D sampler2d;
<e085737>
parents:
diff changeset
42
<e085737>
parents:
diff changeset
43 varying float v_Dot;
<e085737>
parents:
diff changeset
44 varying vec2 v_texCoord;
<e085737>
parents:
diff changeset
45
<e085737>
parents:
diff changeset
46 void main()
<e085737>
parents:
diff changeset
47 {
<e085737>
parents:
diff changeset
48 vec4 color = texture2D(sampler2d,v_texCoord);
<e085737>
parents:
diff changeset
49 /* 光源の色を設定 */
<e085737>
parents:
diff changeset
50 color += vec4(0.1,0.1,0.1,1);
<e085737>
parents:
diff changeset
51 gl_FragColor = vec4(color.xyz * v_Dot, color.a);
<e085737>
parents:
diff changeset
52 }
<e085737>
parents:
diff changeset
53 </script>
<e085737>
parents:
diff changeset
54
<e085737>
parents:
diff changeset
55 <script>
<e085737>
parents:
diff changeset
56 function init(w, h)
<e085737>
parents:
diff changeset
57 {
<e085737>
parents:
diff changeset
58 var gl = initWebGL("example", "vshader", "fshader",
<e085737>
parents:
diff changeset
59 [ "vNormal", "vTexCoord", "vPosition"],
<e085737>
parents:
diff changeset
60 [ 0, 0, 0, 1 ], 10000);
<e085737>
parents:
diff changeset
61
<e085737>
parents:
diff changeset
62 gl.uniform3f(gl.getUniformLocation(gl.program, "lightDir"), 0, 0, 1);
<e085737>
parents:
diff changeset
63 gl.uniform1i(gl.getUniformLocation(gl.program, "sampler2d"), 0);
<e085737>
parents:
diff changeset
64
<e085737>
parents:
diff changeset
65 gl.enable(gl.TEXTURE_2D);
<e085737>
parents:
diff changeset
66
<e085737>
parents:
diff changeset
67 gl.sgroot = new SceneGraphRoot()
<e085737>
parents:
diff changeset
68 walk_init(gl, gl.sgroot, w, h)
<e085737>
parents:
diff changeset
69
<e085737>
parents:
diff changeset
70 return gl;
<e085737>
parents:
diff changeset
71 }
<e085737>
parents:
diff changeset
72
<e085737>
parents:
diff changeset
73 width = 1;
<e085737>
parents:
diff changeset
74 height = -1;
<e085737>
parents:
diff changeset
75
<e085737>
parents:
diff changeset
76 function reshape(ctx)
<e085737>
parents:
diff changeset
77 {
<e085737>
parents:
diff changeset
78 var canvas = document.getElementById('example');
<e085737>
parents:
diff changeset
79 if (canvas.width == width && canvas.width == height)
<e085737>
parents:
diff changeset
80 return;
<e085737>
parents:
diff changeset
81
<e085737>
parents:
diff changeset
82 width = canvas.width
<e085737>
parents:
diff changeset
83 height = canvas.height
<e085737>
parents:
diff changeset
84 // 画面の調節はいまだ手作業
<e085737>
parents:
diff changeset
85
<e085737>
parents:
diff changeset
86 ctx.viewport(0, 0, width, height);
<e085737>
parents:
diff changeset
87 ctx.perspectiveMatrix = new J3DIMatrix4();
<e085737>
parents:
diff changeset
88
<e085737>
parents:
diff changeset
89
<e085737>
parents:
diff changeset
90 ctx.perspectiveMatrix.perspective(30, width/height, 1, 10000);
<e085737>
parents:
diff changeset
91 ctx.perspectiveMatrix.rotate(cameraAngle_xyz[0],0,1,0)
<e085737>
parents:
diff changeset
92 ctx.perspectiveMatrix.rotate(cameraAngle_xyz[1], angleRate_xyz[0], 0, angleRate_xyz[2])
<e085737>
parents:
diff changeset
93 //ctx.perspectiveMatrix.rotate(cameraAngle_xyz[1], -1, 0, 1)
<e085737>
parents:
diff changeset
94
<e085737>
parents:
diff changeset
95
<e085737>
parents:
diff changeset
96 ctx.perspectiveMatrix.lookat(position_xyz[0],position_xyz[1],position_xyz[2], aim_xyz[0], aim_xyz[1], aim_xyz[2], 0, -1, 0);
<e085737>
parents:
diff changeset
97 // ctx.perspectiveMatrix.lookat(0, 0, -500, 0, 0, 0, 0, -1, 0);
<e085737>
parents:
diff changeset
98
<e085737>
parents:
diff changeset
99 }
<e085737>
parents:
diff changeset
100
<e085737>
parents:
diff changeset
101 function drawObject(ctx, angle, xyz, scale, glObj)
<e085737>
parents:
diff changeset
102 {
<e085737>
parents:
diff changeset
103 // setup VBOs
<e085737>
parents:
diff changeset
104 ctx.enableVertexAttribArray(0);
<e085737>
parents:
diff changeset
105 ctx.enableVertexAttribArray(1);
<e085737>
parents:
diff changeset
106 ctx.enableVertexAttribArray(2);
<e085737>
parents:
diff changeset
107
<e085737>
parents:
diff changeset
108 ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.vertexObject);
<e085737>
parents:
diff changeset
109 ctx.vertexAttribPointer(2, 3, ctx.FLOAT, false, 0, 0);
<e085737>
parents:
diff changeset
110
<e085737>
parents:
diff changeset
111 ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.normalObject);
<e085737>
parents:
diff changeset
112 ctx.vertexAttribPointer(0, 3, ctx.FLOAT, false, 0, 0);
<e085737>
parents:
diff changeset
113
<e085737>
parents:
diff changeset
114 ctx.bindBuffer(ctx.ARRAY_BUFFER, glObj.texCoordObject);
<e085737>
parents:
diff changeset
115 ctx.vertexAttribPointer(1, 2, ctx.FLOAT, false, 0, 0);
<e085737>
parents:
diff changeset
116
<e085737>
parents:
diff changeset
117 ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, glObj.indexObject);
<e085737>
parents:
diff changeset
118
<e085737>
parents:
diff changeset
119 // generate the model-view matrix
<e085737>
parents:
diff changeset
120 var mvMatrix = new J3DIMatrix4();
<e085737>
parents:
diff changeset
121 mvMatrix.translate(xyz[0],xyz[1],xyz[2]);
<e085737>
parents:
diff changeset
122 mvMatrix.rotate(angle[0],0,1,0);
<e085737>
parents:
diff changeset
123 mvMatrix.rotate(angle[1],1,0,0);
<e085737>
parents:
diff changeset
124 mvMatrix.rotate(angle[2],0,0,1);
<e085737>
parents:
diff changeset
125 mvMatrix.scale(scale, scale, scale);
<e085737>
parents:
diff changeset
126
<e085737>
parents:
diff changeset
127 // construct the normal matrix from the model-view matrix
<e085737>
parents:
diff changeset
128 var normalMatrix = new J3DIMatrix4(mvMatrix);
<e085737>
parents:
diff changeset
129 normalMatrix.invert();
<e085737>
parents:
diff changeset
130 normalMatrix.transpose();
<e085737>
parents:
diff changeset
131 normalMatrix.setUniform(ctx, ctx.getUniformLocation(ctx.program, "u_normalMatrix"), false);
<e085737>
parents:
diff changeset
132
<e085737>
parents:
diff changeset
133 // construct the model-view * projection matrix
<e085737>
parents:
diff changeset
134 var mvpMatrix = new J3DIMatrix4(ctx.perspectiveMatrix);
<e085737>
parents:
diff changeset
135 mvpMatrix.multiply(mvMatrix);
<e085737>
parents:
diff changeset
136 mvpMatrix.setUniform(ctx, ctx.getUniformLocation(ctx.program, "u_modelViewProjMatrix"), false);
<e085737>
parents:
diff changeset
137
<e085737>
parents:
diff changeset
138 ctx.bindTexture(ctx.TEXTURE_2D, glObj.texture);
<e085737>
parents:
diff changeset
139 ctx.drawElements(ctx.TRIANGLES, glObj.numIndices, ctx.UNSIGNED_SHORT, 0);
<e085737>
parents:
diff changeset
140 }
<e085737>
parents:
diff changeset
141
<e085737>
parents:
diff changeset
142 function drawPicture(ctx,sgroot,w,h)
<e085737>
parents:
diff changeset
143 {
<e085737>
parents:
diff changeset
144 reshape(ctx);
<e085737>
parents:
diff changeset
145 ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT);
<e085737>
parents:
diff changeset
146
<e085737>
parents:
diff changeset
147 MainLoop(ctx,sgroot,w,h)
<e085737>
parents:
diff changeset
148
<e085737>
parents:
diff changeset
149 ctx.flush();
<e085737>
parents:
diff changeset
150
<e085737>
parents:
diff changeset
151 framerate.snapshot();
<e085737>
parents:
diff changeset
152
<e085737>
parents:
diff changeset
153 currentAngle += incAngle;
<e085737>
parents:
diff changeset
154 if (currentAngle > 360){
<e085737>
parents:
diff changeset
155 currentAngle -= 360;
<e085737>
parents:
diff changeset
156 }
<e085737>
parents:
diff changeset
157 }
<e085737>
parents:
diff changeset
158
<e085737>
parents:
diff changeset
159 function start()
<e085737>
parents:
diff changeset
160 {
<e085737>
parents:
diff changeset
161 var c = document.getElementById("example");
<e085737>
parents:
diff changeset
162 var w = Math.floor(window.innerWidth * 0.9);
<e085737>
parents:
diff changeset
163 var h = Math.floor(window.innerHeight * 0.9);
<e085737>
parents:
diff changeset
164
<e085737>
parents:
diff changeset
165 c.width = w;
<e085737>
parents:
diff changeset
166 c.height = h;
<e085737>
parents:
diff changeset
167 theta = 90
<e085737>
parents:
diff changeset
168 theta1 = 90
<e085737>
parents:
diff changeset
169 cameraAngle_xyz = new Array(0,0,0)
<e085737>
parents:
diff changeset
170
<e085737>
parents:
diff changeset
171 var ctx = init(w, h);
<e085737>
parents:
diff changeset
172
<e085737>
parents:
diff changeset
173 document.onkeydown = HandleKeyDown;
<e085737>
parents:
diff changeset
174 document.onkeyup = HandleKeyUp;
<e085737>
parents:
diff changeset
175
<e085737>
parents:
diff changeset
176 currentAngle = 0;
<e085737>
parents:
diff changeset
177 incAngle = 2.0;
<e085737>
parents:
diff changeset
178
<e085737>
parents:
diff changeset
179 var f = function() { drawPicture(ctx,ctx.sgroot,w,h) };
<e085737>
parents:
diff changeset
180 setInterval(f, 10);
<e085737>
parents:
diff changeset
181 framerate = new Framerate("framerate");
<e085737>
parents:
diff changeset
182
<e085737>
parents:
diff changeset
183 }
<e085737>
parents:
diff changeset
184 </script>
<e085737>
parents:
diff changeset
185 <style type="text/css">
<e085737>
parents:
diff changeset
186 canvas {
<e085737>
parents:
diff changeset
187 border: 2px solid black;
<e085737>
parents:
diff changeset
188 }
<e085737>
parents:
diff changeset
189 </style>
<e085737>
parents:
diff changeset
190 </head>
<e085737>
parents:
diff changeset
191 <body onload="start()">
<e085737>
parents:
diff changeset
192 <canvas id="example">
<e085737>
parents:
diff changeset
193 There is supposed to be an example drawing here, but it's not important.
<e085737>
parents:
diff changeset
194 </canvas>
<e085737>
parents:
diff changeset
195 <div id="framerate"></div>
<e085737>
parents:
diff changeset
196 <div id="console"></div>
<e085737>
parents:
diff changeset
197 </body>
<e085737>
parents:
diff changeset
198 </html>