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;