annotate gloopon/resources/render/SceneGraphRoot.js @ 21:87850fc55445

save
author <e085737>
date Sun, 16 Jan 2011 00:57:53 +0900
parents
children cda9d82e1fac
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21
<e085737>
parents:
diff changeset
1 function SceneGraphRoot(w, h){
<e085737>
parents:
diff changeset
2 sg_exec_tree = null;
<e085737>
parents:
diff changeset
3
<e085737>
parents:
diff changeset
4 //controller = create_controller();
<e085737>
parents:
diff changeset
5
<e085737>
parents:
diff changeset
6 sg_draw_tree = new Array();
<e085737>
parents:
diff changeset
7 sg_available_list = null;
<e085737>
parents:
diff changeset
8
<e085737>
parents:
diff changeset
9 screen_w = w;
<e085737>
parents:
diff changeset
10 screen_h = h;
<e085737>
parents:
diff changeset
11
<e085737>
parents:
diff changeset
12 position_xyz = new Array(0, 0, 0);
<e085737>
parents:
diff changeset
13 aim_xyz = new Array(0 ,0, 1);
<e085737>
parents:
diff changeset
14 eye_xyz = new Array(0, -1, 0);
<e085737>
parents:
diff changeset
15 this.sg_src = new Array();
<e085737>
parents:
diff changeset
16 this.camera = null;
<e085737>
parents:
diff changeset
17
<e085737>
parents:
diff changeset
18 angleRate_xyz = new Array(0, 0, 0);
<e085737>
parents:
diff changeset
19 angleRate_x = new Array(1, 0, 0);
<e085737>
parents:
diff changeset
20 angleRate_y = new Array(0, 1, 0);
<e085737>
parents:
diff changeset
21 angleRate_z = new Array(0, 0, 1);
<e085737>
parents:
diff changeset
22 cameraAxis = new Array(0, 0, 0);
<e085737>
parents:
diff changeset
23
<e085737>
parents:
diff changeset
24 //cnt = 0;
<e085737>
parents:
diff changeset
25 }
<e085737>
parents:
diff changeset
26
<e085737>
parents:
diff changeset
27
<e085737>
parents:
diff changeset
28 SceneGraphRoot.prototype.createFromXMLfile = function(gl, sgroot, url){
<e085737>
parents:
diff changeset
29 if(gl.obj == undefined) gl.obj = new Object();
<e085737>
parents:
diff changeset
30 var xmlChara = new Object();
<e085737>
parents:
diff changeset
31 xmlChara = parsePanel(url);
<e085737>
parents:
diff changeset
32 for (var name in xmlChara)
<e085737>
parents:
diff changeset
33 {
<e085737>
parents:
diff changeset
34 gl.obj[name] = makeXmlObj(gl, xmlChara[name])
<e085737>
parents:
diff changeset
35 gl.obj[name].texture = loadImageTexture(gl, xmlChara[name].image);
<e085737>
parents:
diff changeset
36 sgroot.sg_src[name] = gl.obj[name];
<e085737>
parents:
diff changeset
37 }
<e085737>
parents:
diff changeset
38 }
<e085737>
parents:
diff changeset
39
<e085737>
parents:
diff changeset
40
<e085737>
parents:
diff changeset
41 SceneGraphRoot.prototype.createSceneGraph1 = function(id){
<e085737>
parents:
diff changeset
42 if(id < 0){
<e085737>
parents:
diff changeset
43 alert("error: createSceneGraph(id): id not found");
<e085737>
parents:
diff changeset
44 return null;
<e085737>
parents:
diff changeset
45 }
<e085737>
parents:
diff changeset
46
<e085737>
parents:
diff changeset
47 var src = new SceneGraph(id)
<e085737>
parents:
diff changeset
48 src.id = id;
<e085737>
parents:
diff changeset
49
<e085737>
parents:
diff changeset
50 if(sg_exec_tree != null){
<e085737>
parents:
diff changeset
51 sg_exec_tree.addChild(src);
<e085737>
parents:
diff changeset
52 }
<e085737>
parents:
diff changeset
53
<e085737>
parents:
diff changeset
54 SceneGraphRoot.prototype.addNext(src);
<e085737>
parents:
diff changeset
55
<e085737>
parents:
diff changeset
56 return src;
<e085737>
parents:
diff changeset
57 }
<e085737>
parents:
diff changeset
58
<e085737>
parents:
diff changeset
59
<e085737>
parents:
diff changeset
60 SceneGraphRoot.prototype.createSceneGraph3 = function(){
<e085737>
parents:
diff changeset
61 var p = new SceneGraph();
<e085737>
parents:
diff changeset
62
<e085737>
parents:
diff changeset
63 p.sgroot = this;
<e085737>
parents:
diff changeset
64
<e085737>
parents:
diff changeset
65 SceneGraphRoot.prototype.addNext(p);
<e085737>
parents:
diff changeset
66
<e085737>
parents:
diff changeset
67 p.flag_drawable = 0;
<e085737>
parents:
diff changeset
68
<e085737>
parents:
diff changeset
69 return p;
<e085737>
parents:
diff changeset
70 }
<e085737>
parents:
diff changeset
71
<e085737>
parents:
diff changeset
72
<e085737>
parents:
diff changeset
73 SceneGraphRoot.prototype.addNext = function(sg){
<e085737>
parents:
diff changeset
74 sg_available_list = sg;
<e085737>
parents:
diff changeset
75 }
<e085737>
parents:
diff changeset
76
<e085737>
parents:
diff changeset
77 /* 渡された引数をもとにイメージを検索する */
<e085737>
parents:
diff changeset
78 SceneGraphRoot.prototype.getSgid = function(obj_name){
<e085737>
parents:
diff changeset
79 for(var name in sg_src){
<e085737>
parents:
diff changeset
80 if(obj_name == sg_src[name].name){
<e085737>
parents:
diff changeset
81 return sg_src[name];
<e085737>
parents:
diff changeset
82 }
<e085737>
parents:
diff changeset
83 }
<e085737>
parents:
diff changeset
84 return -1
<e085737>
parents:
diff changeset
85 }
<e085737>
parents:
diff changeset
86
<e085737>
parents:
diff changeset
87
<e085737>
parents:
diff changeset
88 SceneGraphRoot.prototype.setCamera = function(sgroot, node){
<e085737>
parents:
diff changeset
89 this.camera = node;
<e085737>
parents:
diff changeset
90 }
<e085737>
parents:
diff changeset
91
<e085737>
parents:
diff changeset
92
<e085737>
parents:
diff changeset
93
<e085737>
parents:
diff changeset
94 SceneGraphRoot.prototype.getCamera = function(ctx, node){
<e085737>
parents:
diff changeset
95 if(node.mat != null){
<e085737>
parents:
diff changeset
96 ctx.perspectiveMatrix = new J3DIMatrix4();
<e085737>
parents:
diff changeset
97 //node.mat.getAsArrayMatrix(ctx.perspectiveMatrix.$matrix);
<e085737>
parents:
diff changeset
98 }else{
<e085737>
parents:
diff changeset
99 ctx.perspectiveMatrix = new J3DIMatrix4();
<e085737>
parents:
diff changeset
100 }
<e085737>
parents:
diff changeset
101
<e085737>
parents:
diff changeset
102 ctx.perspectiveMatrix.perspective(45, width/height, 1, 10000);
<e085737>
parents:
diff changeset
103 /*
<e085737>
parents:
diff changeset
104 ctx.perspectiveMatrix.rotate(cameraAngle_xyz[0], 0,angleRate_y[1],angleRate_y[2]);
<e085737>
parents:
diff changeset
105 ctx.perspectiveMatrix.rotate(cameraAngle_xyz[1], angleRate_x[0], 0,angleRate_x[2]);
<e085737>
parents:
diff changeset
106 ctx.perspectiveMatrix.rotate(cameraAngle_xyz[2], 0, 0, 1);
<e085737>
parents:
diff changeset
107 */
<e085737>
parents:
diff changeset
108 /*
<e085737>
parents:
diff changeset
109 ctx.perspectiveMatrix.quaternion(cameraAngle_xyz[0],0,angleRate_y[1],angleRate_y[2]);
<e085737>
parents:
diff changeset
110 ctx.perspectiveMatrix.quaternion(cameraAngle_xyz[1],angleRate_x[0],0,angleRate_x[2]);
<e085737>
parents:
diff changeset
111 ctx.perspectiveMatrix.quaternion(cameraAngle_xyz[2],0,0,1);
<e085737>
parents:
diff changeset
112 */
<e085737>
parents:
diff changeset
113 //ctx.perspectiveMatrix.translate(position_xyz[0],position_xyz[1],position_xyz[2]);
<e085737>
parents:
diff changeset
114
<e085737>
parents:
diff changeset
115 //ctx.perspectiveMatrix.rotate(cameraAngle_xyz[0],0,1,0);
<e085737>
parents:
diff changeset
116 //ctx.perspectiveMatrix.rotate(cameraAngle_xyz[1],1,0,0);
<e085737>
parents:
diff changeset
117 //ctx.perspectiveMatrix.rotate(cameraAngle_xyz[2],0,0,1);
<e085737>
parents:
diff changeset
118 ctx.perspectiveMatrix.rotate(cameraAngle_xyz[0],cameraAngle_xyz[1],cameraAngle_xyz[2]);
<e085737>
parents:
diff changeset
119 //ctx.perspectiveMatrix.rotate(0,cameraAngle_xyz[1],0);
<e085737>
parents:
diff changeset
120 //ctx.perspectiveMatrix.rotate(0,0,cameraAngle_xyz[2]);
<e085737>
parents:
diff changeset
121 //ctx.perspectiveMatrix.rotate(cameraAngle_xyz[0],cameraAxis[0],cameraAxis[1],cameraAxis[2]);
<e085737>
parents:
diff changeset
122 //ctx.perspectiveMatrix.quaternion(cameraAngle_xyz[0],0,1,0);
<e085737>
parents:
diff changeset
123 //ctx.perspectiveMatrix.quaternion(cameraAngle_xyz[1],1,0,0);
<e085737>
parents:
diff changeset
124 //ctx.perspectiveMatrix.quaternion(cameraAngle_xyz[2],0,0,1);
<e085737>
parents:
diff changeset
125 //ctx.perspectiveMatrix.translate(-position_xyz[0],-position_xyz[1],-position_xyz[2]);
<e085737>
parents:
diff changeset
126
<e085737>
parents:
diff changeset
127 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
128 }
<e085737>
parents:
diff changeset
129
<e085737>
parents:
diff changeset
130
<e085737>
parents:
diff changeset
131
<e085737>
parents:
diff changeset
132
<e085737>
parents:
diff changeset
133
<e085737>
parents:
diff changeset
134
<e085737>
parents:
diff changeset
135 SceneGraphRoot.prototype.getController = function(){
<e085737>
parents:
diff changeset
136 var left_push = currentlyPressedKeys[37]; /* ← */
<e085737>
parents:
diff changeset
137 var down_push = currentlyPressedKeys[40]; /* ↓ */
<e085737>
parents:
diff changeset
138 var right_push = currentlyPressedKeys[39]; /* → */
<e085737>
parents:
diff changeset
139 var up_push = currentlyPressedKeys[38]; /* ↑ */
<e085737>
parents:
diff changeset
140 var cross_push = currentlyPressedKeys[90]; /* Z */
<e085737>
parents:
diff changeset
141 var circle_push = currentlyPressedKeys[88]; /* X */
<e085737>
parents:
diff changeset
142 var start_push = currentlyPressedKeys[13]; /* Enter */
<e085737>
parents:
diff changeset
143 var zoom_in_push = currentlyPressedKeys[75]; /* K */
<e085737>
parents:
diff changeset
144 var zoom_out_push = currentlyPressedKeys[76]; /* L */
<e085737>
parents:
diff changeset
145 var left_move = currentlyPressedKeys[65]; /* A */
<e085737>
parents:
diff changeset
146 var right_move = currentlyPressedKeys[68]; /* D */
<e085737>
parents:
diff changeset
147 var front_move = currentlyPressedKeys[87]; /* W */
<e085737>
parents:
diff changeset
148 var back_move = currentlyPressedKeys[83]; /* S */
<e085737>
parents:
diff changeset
149 var space_push = currentlyPressedKeys[32]; /* SPACE */
<e085737>
parents:
diff changeset
150
<e085737>
parents:
diff changeset
151
<e085737>
parents:
diff changeset
152 this.right_isHold = function(){
<e085737>
parents:
diff changeset
153 return right_push;
<e085737>
parents:
diff changeset
154 }
<e085737>
parents:
diff changeset
155
<e085737>
parents:
diff changeset
156 this.right_isRelease = function(){
<e085737>
parents:
diff changeset
157 return !right_push;
<e085737>
parents:
diff changeset
158 }
<e085737>
parents:
diff changeset
159
<e085737>
parents:
diff changeset
160 this.left_isHold = function(){
<e085737>
parents:
diff changeset
161 return left_push;
<e085737>
parents:
diff changeset
162 }
<e085737>
parents:
diff changeset
163
<e085737>
parents:
diff changeset
164 this.left_isRelease = function(){
<e085737>
parents:
diff changeset
165 return !left_push;
<e085737>
parents:
diff changeset
166 }
<e085737>
parents:
diff changeset
167
<e085737>
parents:
diff changeset
168 this.up_isHold = function(){
<e085737>
parents:
diff changeset
169 return up_push;
<e085737>
parents:
diff changeset
170 }
<e085737>
parents:
diff changeset
171
<e085737>
parents:
diff changeset
172 this.up_isRelease = function(){
<e085737>
parents:
diff changeset
173 return !up_push;
<e085737>
parents:
diff changeset
174 }
<e085737>
parents:
diff changeset
175
<e085737>
parents:
diff changeset
176 this.down_isHold = function(){
<e085737>
parents:
diff changeset
177 return down_push;
<e085737>
parents:
diff changeset
178 }
<e085737>
parents:
diff changeset
179
<e085737>
parents:
diff changeset
180 this.down_isRelease = function(){
<e085737>
parents:
diff changeset
181 return !down_push;
<e085737>
parents:
diff changeset
182 }
<e085737>
parents:
diff changeset
183
<e085737>
parents:
diff changeset
184 this.cross_isHold = function(){
<e085737>
parents:
diff changeset
185 return cross_push;
<e085737>
parents:
diff changeset
186 }
<e085737>
parents:
diff changeset
187
<e085737>
parents:
diff changeset
188 this.cross_isRelease = function(){
<e085737>
parents:
diff changeset
189 return !cross_push;
<e085737>
parents:
diff changeset
190 }
<e085737>
parents:
diff changeset
191
<e085737>
parents:
diff changeset
192 this.circle_isHold = function(){
<e085737>
parents:
diff changeset
193 return circle_push;
<e085737>
parents:
diff changeset
194 }
<e085737>
parents:
diff changeset
195
<e085737>
parents:
diff changeset
196 this.circle_isRelease = function(){
<e085737>
parents:
diff changeset
197 return !circle_push;
<e085737>
parents:
diff changeset
198 }
<e085737>
parents:
diff changeset
199
<e085737>
parents:
diff changeset
200 this.start_isHold = function(){
<e085737>
parents:
diff changeset
201 return start_push;
<e085737>
parents:
diff changeset
202 }
<e085737>
parents:
diff changeset
203
<e085737>
parents:
diff changeset
204 this.start_isRelease = function(){
<e085737>
parents:
diff changeset
205 return !start_push;
<e085737>
parents:
diff changeset
206 }
<e085737>
parents:
diff changeset
207
<e085737>
parents:
diff changeset
208 this.zoom_in_isHold = function(){
<e085737>
parents:
diff changeset
209 return zoom_in_push;
<e085737>
parents:
diff changeset
210 }
<e085737>
parents:
diff changeset
211
<e085737>
parents:
diff changeset
212 this.zoom_out_isHold = function(){
<e085737>
parents:
diff changeset
213 return zoom_out_push;
<e085737>
parents:
diff changeset
214 }
<e085737>
parents:
diff changeset
215
<e085737>
parents:
diff changeset
216 this.left_move_isHold = function(){
<e085737>
parents:
diff changeset
217 return left_move;
<e085737>
parents:
diff changeset
218 }
<e085737>
parents:
diff changeset
219
<e085737>
parents:
diff changeset
220 this.right_move_isHold = function(){
<e085737>
parents:
diff changeset
221 return right_move;
<e085737>
parents:
diff changeset
222 }
<e085737>
parents:
diff changeset
223
<e085737>
parents:
diff changeset
224 this.front_move_isHold = function(){
<e085737>
parents:
diff changeset
225 return front_move;
<e085737>
parents:
diff changeset
226 }
<e085737>
parents:
diff changeset
227
<e085737>
parents:
diff changeset
228 this.back_move_isHold = function(){
<e085737>
parents:
diff changeset
229 return back_move;
<e085737>
parents:
diff changeset
230 }
<e085737>
parents:
diff changeset
231
<e085737>
parents:
diff changeset
232 this.space_isHold = function(){
<e085737>
parents:
diff changeset
233 return space_push;
<e085737>
parents:
diff changeset
234 }
<e085737>
parents:
diff changeset
235
<e085737>
parents:
diff changeset
236 this.space_isRelease = function(){
<e085737>
parents:
diff changeset
237 return !space_push;
<e085737>
parents:
diff changeset
238 }
<e085737>
parents:
diff changeset
239 }
<e085737>
parents:
diff changeset
240
<e085737>
parents:
diff changeset
241
<e085737>
parents:
diff changeset
242
<e085737>
parents:
diff changeset
243 /* rootになるnodeを設定する */
<e085737>
parents:
diff changeset
244 SceneGraphRoot.prototype.setSceneData = function(sg){
<e085737>
parents:
diff changeset
245 sg.parents = null;
<e085737>
parents:
diff changeset
246 sg_exec_tree = sg;
<e085737>
parents:
diff changeset
247 }
<e085737>
parents:
diff changeset
248
<e085737>
parents:
diff changeset
249