comparison Renderer/Engine/ChangeLog @ 507:735f76483bb2

Reorganization..
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 12 Oct 2009 09:39:35 +0900
parents Renderer/test_render/ChangeLog@55ea4465b1a2
children 360032cc500e
comparison
equal deleted inserted replaced
506:1d4a8a86f26b 507:735f76483bb2
1 2009-08-06 Shinji Kono <kono@ie.u-ryukyu.ac.jp>
2
3 DrawSpan の reboot/ TASK_DRAW_SPAN2 は、使ってないのね。
4
5
6
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 要するに、これからはちゃんと書いていこうと思います。