539
|
1 2009-08-06 Shinji Kono <kono@ie.u-ryukyu.ac.jp>
|
|
2
|
|
3 DrawSpan の reboot/ TASK_DRAW_SPAN2 は、使ってないのね。
|
|
4
|
|
5
|
|
6
|
283
|
7 2009-03-29 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
|
|
8
|
|
9 * Makefile
|
|
10 SGlist.{cpp,h} を make clean で消去し、
|
|
11 make で自動生成するようにしました。
|
|
12 けどなんか他のファイルと同じ書きかたしても
|
|
13 上手く行かなかった。何か見落としてるかもしれない。誰か直(ry
|
|
14
|
|
15 2009-02-12 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
|
|
16
|
|
17 * task/CreatePolygonFromSceneGraph.cpp (CreatePolygonFromSceneGraph::run): fix
|
|
18 下にあわせる様に
|
|
19
|
|
20 * SceneGraph.cpp (SceneGraph::SceneGraph, SceneGraph::init)
|
|
21 (SceneGraph::finalize_original): fix
|
|
22 今まで、Polygon が持つ vertex, normal, texture coordinate ってのが
|
|
23
|
|
24 ---------------------------------------
|
|
25 data = | vertex | normal | texture | sizeof(data) = size*3
|
|
26 ---------------------------------------
|
|
27 \ size / \ size / \ size /
|
|
28
|
|
29 てな感じで、SceneGraph->data の中に 3 つ入ってたわけです。
|
|
30 これだと、アクセスする時にどれがどれかわからんくなるし、
|
|
31 ソース読む時に迷う(経験談)ので、data を消して、代わりに
|
|
32 coord_xyz, normal, coord_tex を作りました。
|
|
33
|
|
34 * polygon.cpp (Polygon::pickup_coordinate)
|
|
35 (Polygon::pickup_normal, Polygon::pickup_texture):
|
|
36
|
|
37 2009-02-10 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
|
|
38
|
|
39 * Makefile.macosx (depend): fix
|
|
40 depend.inc とかを吐き出す様にしました
|
|
41
|
|
42 * Camera.cpp (Camera::Camera, Camera::updateView)
|
|
43 (Camera::updatePerspective, Camera::updateScreen)
|
|
44 (Camera::update): fix
|
|
45 なんとかカメラできてるっぽいです。
|
|
46 Perspective とかも聞いてるし、中心に向かって遠くなってる。
|
|
47 あとは行列演算をもうちょいこぎれいにすればいい感じかなー。
|
|
48
|
|
49 残りは、ユーザ側からの設定。例えば
|
|
50 1. 車の運転席目線(FPS)
|
|
51 2. 車の後ろから(TPS)
|
|
52 3. 車の前から(SPS)
|
|
53
|
|
54 的なのを、ユーザが CameraData みたいな構造体に
|
|
55 zd とか yd とかを設定して camera->set(data) とかやれば
|
|
56 反映するみたいな!みたいな!
|
|
57
|
|
58 2009-02-09 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
|
|
59
|
|
60 * SceneGraphRoot.cpp (SceneGraphRoot::allExecute)
|
|
61 (SceneGraphRoot): fix
|
|
62 SceneGraph を root から走査していきながら
|
|
63 その都度コピーしていき、最終的に全体の新しい SceneGraph ができる。
|
|
64 削除されていればコピーしない、っていうのは簡単だけど
|
|
65 追加された場合、コピー元に追加されるのは困るので
|
|
66 コピーしたやつに追加って形にしたら今のコードになった。
|
|
67 めんどくさいっちゃめんどくさい。もっと綺麗な書き方あるかね
|
|
68
|
|
69
|
|
70 2009-02-01 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
|
|
71
|
|
72 * SceneGraph.cpp (SceneGraph::SceneGraph)
|
|
73 (SceneGraph::SceneGraph, SceneGraph::SceneGraph)
|
|
74 (SceneGraph::finalize_original, SceneGraph)
|
|
75 (SceneGraph::finalize_copy): add, fix
|
|
76 今のところ、SceneGraph の作られ方は
|
|
77
|
|
78 a1. xml ファイルから生成 (sgid 毎、sg_src[] に格納)
|
|
79 a2. ID を指定し、sg_src[id] の SceneGraph を複製
|
|
80 a3. xml も ID も指定しない、何も表示しない SceneGraph
|
|
81
|
|
82 a1 の時はポリゴンデータ(data[])を生成するわけだけど、
|
|
83 a2 でも、オリジナルと同じ data[] を持つ必要は(今は)ない。
|
|
84 なので、a2 の場合、data[] は a1 と同じ場所を指せば良い。
|
|
85 しかし、今までは、SceneGraph::~SceneGraph では
|
|
86 どんな SceneGraph でも
|
|
87
|
|
88 delete [] data;
|
|
89
|
|
90 とかやってたので、それならということで
|
|
91
|
|
92 b1. a1 用の、Desturctor で data[] を delete する finalize_original()
|
|
93 b2. a2,a3 用の、data[] を削除しない finalize_copy()
|
|
94
|
|
95 を用意し、a1,a2,a3 の Consturoctor で、どっちかを設定する。
|
|
96
|
|
97 2009-01-30 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
|
|
98
|
|
99 * spe/DrawSpan.cpp (DrawSpan::drawDot1): add
|
|
100 span->length_x == 1 の処理。
|
|
101
|
|
102 (DrawSpan::drawDot2): add
|
|
103 Dot1 の続き。要は Dot1 で load して、Dot2 で wait->書き込みって感じ
|
|
104 しかし、1ドットだとそこまで待つ必要もないかなって感じなので
|
|
105 今は Dot 2には何も書いてない。ちゃんとしらべて、必要そうだったら
|
|
106 ここで書き込みを行う
|
|
107
|
|
108 (DrawSpan::drawLine1): add
|
|
109 span->length_x > 1 の処理。
|
|
110 いくつか Load パターンを考えてる途中
|
|
111
|
|
112 1. 全部 load
|
|
113 1. z buf で描きこむと判断したとき、その pixel の texture tile を
|
|
114 load する。(すでにある、ないに関わらず。ある場合は、実際には
|
|
115 Load の処理は行われないが)
|
|
116 2. Line2 で描画する(ここで使う tile はすでに全部読み込まれてるとする
|
|
117
|
|
118 2. 無い物だけload
|
|
119 1. 書き込むと判断したとき、tile があるかどうかを調べ
|
|
120 あればそのまま linebuf に、無ければ load を掛けて continue;
|
|
121 このとき、load した(つまりまだ書き込まれてない) 場所を覚えておく
|
|
122 2. Line2 で、1. で覚えた場所から再び計算して描画する。
|
|
123 tile はすでに全部読み込まれているとする
|
|
124
|
|
125 まだあったけど忘れた。
|
|
126 今のところ描画領域が 256x8、もしくは512x8 で、
|
|
127 単純に考えて、領域pixel と texture pixel が一緒だと考えると
|
|
128 一個の Span で最大 64 (512/8) 個の tile があればいいと考えられる。
|
|
129 一個の SPE には Tile を 128 個持っておけるし、
|
|
130 今は Span を二つ平行して処理しているので、
|
|
131 途中で Tile が足りなくなる!ってことはないはず。
|
|
132 とまあ、いろいろ考えてたんだけど、何書けばいいのか忘れた。。
|
|
133 思い出したらまた書きます。
|
|
134
|
|
135 2009-01-26 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
|
|
136
|
|
137 * spe/CreateSpan.cpp (CreateSpan::run): fix
|
|
138 ポリゴンをx軸に水平に分割し、その二つを計算するってのが
|
|
139 half_triangelで、上としたで、何故か渡すテクスチャの情報が違う。
|
|
140 なんでだろうと思いつつも、今まで特に問題が出なかったから無視してたが、
|
|
141 今回、三つのSceneGraph を動かしてる時に問題発生。
|
|
142 それぞれ違うテクスチャを貼ってるのに、なぜかそれらのうちの半分が
|
|
143 別のテクスチャが貼られていた。簡単に言うと、A,B,C の SG があった。
|
|
144
|
|
145 A: 正常
|
|
146 B: 右上だけ A のテクスチャ
|
|
147 C: 右上だけ A のテクスチャ
|
|
148
|
|
149 といった具合。わけがわからなかったんだが、
|
|
150 half_triangle に渡すやつの所為だと気づきました
|
|
151 なんでここだけ pp->tri[0].tex_info.addr とか渡してんのか未だに謎。
|
|
152 単なる書き間違いか直し間違いか。微妙なところ。
|
|
153 これ書いた後輩はもう居ない
|
|
154
|
|
155
|
|
156 * SceneGraphIterator.cpp (SceneGraphIterator::hasNext)
|
|
157 (SceneGraphIterator::next): fix
|
|
158 検索する引数を int id に変更。
|
|
159
|
|
160 * SceneGraph.h (class SceneGraph): add variable
|
|
161 int flag_drawbale : この SceneGraph は描画する物かどうか
|
|
162 int sgid : SceneGraph の ID 。ID は SGList.h にあるものを使う
|
|
163
|
|
164 * SceneGraphIterator.cpp : add file
|
|
165 SceneGraph を走査する用。
|
|
166 基本、Java の Iterator を参考にしてます。
|
|
167 追加機能としては
|
|
168
|
|
169 - hasNext(const char* name);
|
|
170 名前が name の SceneGraph があるかどうか
|
|
171
|
|
172 - next(const char* name);
|
|
173 名前が name の SceneGraph まで進ませる
|
|
174
|
|
175 * SceneGraphIterator.cpp : TODO
|
|
176 hasNext とかは名前じゃなくて ID が良いかなーとも思うけどね。
|
|
177 てかその方がいいな。あとで直します
|
|
178
|
|
179 * ieshoot.cpp (ieboss_move): add
|
|
180 (ieboss_collision): add
|
|
181 BOSSの動きを追加。
|
|
182 IETAMA が数回衝突したら BOSS を消すって処理。
|
|
183
|
|
184 * SceneGraphIterator.cpp (SceneGraphIterator::next): fix
|
|
185 break してなかった。そりゃ取れないわ
|
|
186
|
|
187 * SceneGraph.cpp (SceneGraph::realRemoveFromTree): fix
|
|
188
|
|
189 < p1 = p1->next;
|
|
190 < p = p->next;
|
|
191 =====
|
|
192 > p1 = p1->brother;
|
|
193 > p = p->brother;
|
|
194
|
|
195
|
|
196 * viewer.cpp (Viewer::run_draw): fix
|
|
197 Spanの無い部分を塗りつぶす処理はタスクを走らせず、
|
|
198 そのまま memset とかの方が早い。
|
|
199 まとめてするタスクを立ち上げるってのもいいかもしれない。
|
|
200 あと、memsetで指定する値が、0xFF と 0x00 とで速度が違う。
|
|
201 universe だと、
|
|
202
|
|
203 0xFF 24fps
|
|
204 0x00 30fps
|
|
205
|
|
206 なんだろう。0x00 だと、ただのクリアになるから速いってことかな。
|
|
207
|
|
208 * Camera.h (class Camera): add
|
|
209 とりあえず Camera を作って、これを SceneGraph の Top にした。
|
|
210
|
|
211 * SceneGraph.cpp (SceneGraph::realRemoveFromTree): add
|
|
212 realRemove() の Tree構造用。削除後の tree top を返す様にしている。
|
|
213 まあ top が消えなければ返す必要も無いし、top が消えるってことは
|
|
214 SceneGraph そのものが消えるってことでそうは無い・・はずだけどね。
|
|
215 (SceneGraph::realRemoveFromList): add
|
|
216 realRemove() の list用。削除後の list top を返す様にしている。
|
|
217 (SceneGraph::realRemoveFromTree): fix
|
|
218 < p->next = p1->next;
|
|
219 ===
|
|
220 > p->brother = p1->brother;
|
|
221
|
|
222 2009-01-25 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
|
|
223
|
|
224 * add (tools/create_sglist): new
|
|
225 必要な SceneGraph xml file から SceneGraph を抽出し、
|
|
226 名前と対応する ID を SGList.h に出力する。
|
|
227 また、名前から ID を求める sglist_table を SGList.cpp に出力する。
|
|
228
|
|
229 * SceneGraph.cpp (SceneGraph::remove): add
|
|
230 User API。ここで削除するのではなく、まずはフラグを立てるだけ
|
|
231 ここですぐに消すと、allExecute() の走査で何気に困る
|
|
232
|
|
233 (SceneGraph::isRemoved): add
|
|
234 この SceneGraph 削除フラグが立っているかどうか
|
|
235
|
|
236 (SceneGraph::realRemove): TODO
|
|
237 子を持つ SceneGraph が消された場合、
|
|
238 その子孫を全て削除するかどうか。まあ削除するのかな。
|
|
239
|
|
240 (SceneGraph::realRemove): add
|
|
241 Cerium System で呼ばれる。
|
|
242 remove flag の立った SceneGraph を削除する。
|
|
243 parentやbrother、next は繋ぎ直す。
|
|
244
|
|
245 * SceneGraphRoot.cpp (SceneGraphRoot::addNext): add
|
|
246 sg_available_list に追加していく
|
|
247 木の操作が要らないアクセスの際にはこっちの方がいい。
|
|
248
|
|
249 (SceneGraphRoot::setSceneData): add
|
|
250 Cerium に SceneGraph の tree を渡す。Cerium はこの tree を辿って
|
|
251 処理を行う
|
|
252
|
|
253 (SceneGraphRoot::createFromXMLfile): add
|
|
254 xml file を指定して、そこから SceneGraph を生成し、
|
|
255 sg_src に格納する。ユーザはこの SceneGraph を直接は扱えない。
|
|
256 以下に示す createSceneGraph の、読み込み元データとして保存しておく。
|
|
257
|
|
258 (SceneGraphRoot::createSceneGraph): add
|
|
259 オリジナルの SceneGraph を clone してユーザに返す。
|
|
260 この SceneGraph をユーザが操作する。
|
|
261
|
|
262 * SceneGraphRoot.h (class SceneGraphRoot): new variables
|
|
263 sg_src, sg_exec_list, sg_draw_list, sg_available_list
|
|
264
|
|
265 * addfile (SceneGraphRoot.cpp)
|
|
266 SceneGraph を管理するクラス、ってところか。
|
|
267 Root ってのは SceneGraph という名前からすると
|
|
268 一番親と思われそうで微妙です。変えるかも。
|
|
269
|
|
270 2009-01-12 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
|
|
271
|
|
272 * Joystick.cpp: TODO
|
|
273 使用している Joystick が
|
|
274
|
|
275 1. PS3 コントローラ
|
|
276 2. PS2 コントローラにUSB変換をかましたやつ
|
|
277
|
|
278 によってボタンの番号配置が違うので
|
|
279 そこを自動的に取得して割り振りたい
|
|
280
|
|
281 SDL_JoystickName() で名前取れるんだけど
|
|
282 全部共通なのかなー。「PS3って文字列があるか否か」でわけてもいいけど
|
|
283
|
|
284 * Joystick.cpp: fix
|
|
285 コントローラボタンの番号を PS3 コントローラに合わせました。
|
|
286
|
|
287 - 参考
|
|
288 PS3 Linux SDLでプログラミング -コントローラを使う-
|
|
289 http://yun.cup.com/ps3sdl007.html
|
|
290
|
|
291 アナログスティックの方はまだです
|
|
292
|
|
293 2009-01-08 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
|
|
294
|
|
295 * spe/DrawSpanRenew.cpp (DrawSpanRenew::run): fix
|
|
296 next_spack を free() していたが、do-while の最初で
|
|
297 next_spack = NULL とかやっている。
|
|
298 DrawSpan だと、free するのは free_spack ってやつなので
|
|
299 問題なかったが、なぜここは free(next_spack) とかやってるのか。
|
|
300 というわけで、next_spack,spack 両方用の
|
|
301 free_spack1, free_spack2 を生成して、これを free させることに。
|
|
302 これで、ようやくまともに動くようになった。けど微妙です。
|
|
303 遅いですね。
|
|
304
|
|
305 * addFile : DrawSpanRenew.cpp
|
|
306 DrawSpan の再起動 ver。
|
|
307
|
|
308 2008-12-22 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
|
|
309
|
|
310 * fix
|
|
311 charles を Fedora 10 に上げて、コンパイラが新しくなったせいか、
|
|
312 以下のような warning が出始めた
|
|
313
|
|
314 warning: deprecated conversion from string constant to 'char *'
|
|
315
|
|
316 まあよくわからんが、例えば
|
|
317
|
|
318 char *str = "hoge";
|
|
319
|
|
320 みたいな所だとこの warning が出る。これを
|
|
321
|
|
322 const char *str = "hoge";
|
|
323
|
|
324 にすると消えた。
|
|
325 以後こういう形に統一しろよ的なやつなのかな。
|
|
326
|
|
327 2008-12-19 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
|
|
328
|
|
329 * viewer.cpp (Viewer::run_draw): fix
|
|
330 startx, endx に対して、start_y, end_y って名前は統一されてなくて
|
|
331 わかりづらいので、starty, endy に変更
|
|
332
|
|
333 * main.cpp (init): fix
|
|
334 bpp (BitsPerPixel) の値がデフォルトで 0 になっていた。
|
|
335 今のレンダリング方式では 32 がデフォルトなので、間違ってた。
|
|
336 今まで気づかなかったのは
|
|
337
|
|
338 1. SDL_SetVideoMode に bpp = 0 で渡される
|
|
339 2. SDL が開発・実行環境に合わせて bpp を設定
|
|
340 3. 今までそれが 32 になってた
|
|
341
|
|
342 しかし、ゲーム班の環境では bpp = 16 になってしまったため、
|
|
343 その次の bitmap の allocate の時に
|
|
344 screen->pitch*height = 16*width*height となり、
|
|
345 DrawSpan では 32 のつもりで書き込んでいたため領域外への
|
|
346 メモリ書き込み->エラー
|
|
347
|
|
348 ゲーム班ありがとう
|
|
349
|
|
350 2008-12-16 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
|
|
351
|
|
352 * SceneGraph.cpp (makeTapestry): add
|
|
353 SceneGraph::get_data にあったけど、ごちゃごちゃしてたので
|
|
354 関数として生成
|
|
355
|
|
356 * viewer.cpp (Viewer::run_init, Viewer::run_draw): fix
|
|
357 * spe/DrawSpan.cpp (DrawSpan::zRow_init): delete
|
|
358
|
|
359 Z Buffering に使う zRow は DrawSpan で毎回生成、初期化するのではなく、
|
|
360 PPE で生成、初期化を行っておき、DrawSpan に add_inData で
|
|
361 DMA で渡すという方法に変更。速度的にはほんのちょっとしか(ry
|
|
362
|
|
363 * spe/CreateSpan.cpp (CreateSpan::half_triangle): fix
|
|
364 getScale に渡す tex_width,tex_height を修正。
|
|
365 比較にそのまま tex_width, tex_height を使うと、
|
|
366 Span が持つテクスチャが全体の一部分だったとしても
|
|
367 比較結果で縮小が行われてしまうため。
|
|
368
|
|
369 - 例
|
|
370 span->length_x = 32;
|
|
371 tex_width = 128;
|
|
372 tex_x_len = (span->tex_x2 - span->tex_x1) = (0.5 - 0.3) = 0.2;
|
|
373
|
|
374 今までの処理だと、span->length_x < tex_width の結果により
|
|
375 縮小されたテクスチャを使うことになる。
|
|
376 しかし、実際に Span が使う Texture の長さは
|
|
377
|
|
378 tex_width*tex_x_len = 24
|
|
379
|
|
380 なので、縮小を行う必要は無い
|
|
381
|
|
382
|
|
383 2008-12-12 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp>
|
|
384
|
|
385 * SceneGraph.cpp (SceneGraph::get_data): Todo
|
|
386 テクスチャの縦横が 8 の倍数でなければ弾く処理を入れる。
|
|
387
|
|
388 * spe/DrawSpan.cpp (DrawSpan::run): Todo
|
|
389 テクスチャの座標計算と、そこから取得できる Tile の DMA を
|
|
390 一スレッドで処理しているのでそれを分けないといけない
|
|
391
|
|
392 * spe/CreateSpan.cpp (getTapestry): Add
|
|
393 (getScale): Add
|
|
394
|
|
395 * memo: 雑記
|
|
396 ようやくこいつに ChangeLog を加えました。
|
|
397 なんか emacs で「C-x 4 a」とかすると、ChangeLog の entry が
|
|
398 加えれられるんだけど、上の階層のを探しにいくので、TaskManager/ のに
|
|
399 加えようとしてたわけさ。まあそういう仕様なんだけど。
|
|
400 で、だからといって不可能ってわけじゃないから書けばよかったんだが。
|
|
401
|
|
402 要するに、これからはちゃんと書いていこうと思います。
|