Mercurial > hg > Game > Cerium
comparison Renderer/Engine/spe/DrawSpan.cc @ 1164:d7637cb85bd8 draft
minor change
author | yutaka@charles.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Mon, 09 May 2011 16:29:30 +0900 |
parents | bfc2c6628fef |
children | 0f8bee7eed3c |
comparison
equal
deleted
inserted
replaced
1163:b417abf82193 | 1164:d7637cb85bd8 |
---|---|
314 { | 314 { |
315 //printf("%d\n", js); | 315 //printf("%d\n", js); |
316 } | 316 } |
317 #endif | 317 #endif |
318 | 318 |
319 | |
320 | |
321 /** | 319 /** |
322 * 長さが 1 より大きい Span の描画 | 320 * 長さが 1 より大きい Span の描画 |
323 * | 321 * |
324 * 本来の目的として、この関数(drawLine1) では | 322 * 本来の目的として、この関数(drawLine1) では |
325 * : 既に SPE 上に Tile のある pixel だけ描画 | 323 * : 既に SPE 上に Tile のある pixel だけ描画 |
344 | 342 |
345 float normal_x = span->normal_x; | 343 float normal_x = span->normal_x; |
346 float normal_y = span->normal_y; | 344 float normal_y = span->normal_y; |
347 float normal_z = span->normal_z; | 345 float normal_z = span->normal_z; |
348 | 346 |
347 | |
349 int js = (x < startx) ? startx - x : 0; | 348 int js = (x < startx) ? startx - x : 0; |
350 int je = (x + x_len > endx) ? endx - x : x_len; | 349 int je = (x + x_len > endx) ? endx - x : x_len; |
350 | |
351 /* span->x に対応する Texture の座標 (tex_xpos, tex_ypos) */ | |
352 int tex_xpos, tex_ypos; | |
351 | 353 |
352 // span の始点に対応する座標 (tex1, tey1) | 354 // span の始点に対応する座標 (tex1, tey1) |
353 float tex1 = span->tex_x1; | 355 float tex1 = span->tex_x1; |
354 float tey1 = span->tex_y1; | 356 float tey1 = span->tex_y1; |
355 | 357 |
370 | 372 |
371 int ret = je+1; | 373 int ret = je+1; |
372 | 374 |
373 //for (int j = js; j <= je; j++) { | 375 //for (int j = js; j <= je; j++) { |
374 for (int j = je; j >= js; j--) { | 376 for (int j = je; j >= js; j--) { |
375 | 377 float tex_x, tex_y, tex_z; |
376 float tex_z; | |
377 | 378 |
378 world_z -= z_inclination; | 379 world_z -= z_inclination; |
380 | |
379 localx = getLocalX(x-1+j); | 381 localx = getLocalX(x-1+j); |
382 | |
380 tex_z = zpos1*(x_len-1-j)/(x_len-1) + zpos2*j/(x_len-1); | 383 tex_z = zpos1*(x_len-1-j)/(x_len-1) + zpos2*j/(x_len-1); |
381 | 384 |
385 tex_x = tex1*(x_len-1-j)/(x_len-1) + tex2*j/(x_len-1); | |
386 tex_y = tey1*(x_len-1-j)/(x_len-1) + tey2*j/(x_len-1); | |
387 if (tex_x > 1) tex_x = 1; | |
388 if (tex_x < 0) tex_x = 0; | |
389 if (tex_y > 1) tex_y = 1; | |
390 if (tex_y < 0) tex_y = 0; | |
391 tex_xpos = (int)((span->tex_width-1) * tex_x); | |
392 tex_ypos = (int)((span->tex_height-1) * tex_y); | |
393 | |
382 if (tex_z < g->zRow[localx + (rangex*localy)]) { | 394 if (tex_z < g->zRow[localx + (rangex*localy)]) { |
383 | |
384 float tex_x, tex_y; | |
385 | |
386 tex_x = tex1*(x_len-1-j)/(x_len-1) + tex2*j/(x_len-1); | |
387 tex_y = tey1*(x_len-1-j)/(x_len-1) + tey2*j/(x_len-1); | |
388 | |
389 if (tex_x > 1) tex_x = 1; | |
390 if (tex_x < 0) tex_x = 0; | |
391 if (tex_y > 1) tex_y = 1; | |
392 if (tex_y < 0) tex_y = 0; | |
393 | |
394 /* span->x に対応する Texture の座標 (tex_xpos, tex_ypos) */ | |
395 int tex_xpos, tex_ypos; | |
396 | |
397 tex_xpos = (int)((span->tex_width-1) * tex_x); | |
398 tex_ypos = (int)((span->tex_height-1) * tex_y); | |
399 | |
400 // (tex_xpos, tex_ypos) の、Tile 内(上の図参照)での座標と | 395 // (tex_xpos, tex_ypos) の、Tile 内(上の図参照)での座標と |
401 // そのブロックのアドレス(MainMemory) | 396 // そのブロックのアドレス(MainMemory) |
402 memaddr tex_addr; | 397 memaddr tex_addr; |
403 int tex_localx; | 398 int tex_localx; |
404 int tex_localy; | 399 int tex_localy; |