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