Mercurial > hg > Members > kono > Cerium
comparison TaskManager/Test/simple_pack/polygon.cpp @ 68:35a6cf176c38
*** empty log message ***
author | chiaki |
---|---|
date | Sun, 17 Feb 2008 21:45:07 +0900 |
parents | 0c8ae614d421 |
children |
comparison
equal
deleted
inserted
replaced
67:7d2874fb0671 | 68:35a6cf176c38 |
---|---|
185 Vertex *ver3 = new Vertex(xyz3[0],xyz3[1],xyz3[2],data[n+size*6+6],data[n+size*6+6+1]); | 185 Vertex *ver3 = new Vertex(xyz3[0],xyz3[1],xyz3[2],data[n+size*6+6],data[n+size*6+6+1]); |
186 //printf("x1:%f ,%f ,%f , %f, %f\n",xyz1[0],xyz1[1],xyz1[2],data[n+size*6],data[n+size*6+1]); | 186 //printf("x1:%f ,%f ,%f , %f, %f\n",xyz1[0],xyz1[1],xyz1[2],data[n+size*6],data[n+size*6+1]); |
187 //printf("x2:%f ,%f ,%f , %f, %f\n",xyz2[0],xyz2[1],xyz2[2],data[n+size*6+3],data[n+size*6+3+1]); | 187 //printf("x2:%f ,%f ,%f , %f, %f\n",xyz2[0],xyz2[1],xyz2[2],data[n+size*6+3],data[n+size*6+3+1]); |
188 //printf("x3:%f ,%f ,%f , %f, %f\n",xyz3[0],xyz3[1],xyz3[2],data[n+size*6+6],data[n+size*6+6+1]); | 188 //printf("x3:%f ,%f ,%f , %f, %f\n",xyz3[0],xyz3[1],xyz3[2],data[n+size*6+6],data[n+size*6+6+1]); |
189 Triangle *tri = new Triangle(ver1,ver2,ver3); | 189 Triangle *tri = new Triangle(ver1,ver2,ver3); |
190 Span *span = new Span(); | 190 Span_c *span = new Span_c(); |
191 span->viewer = viewer; | 191 span->viewer = viewer; |
192 span->p = this; | 192 span->p = this; |
193 span->create_span(tri,texture_image); | 193 span->create_span(tri,texture_image); |
194 delete ver1; | 194 delete ver1; |
195 delete ver2; | 195 delete ver2; |
315 Vertex *ver1 = new Vertex(xyz1[0],xyz1[1],xyz1[2],node.texture[nt],node.texture[nt+1]); | 315 Vertex *ver1 = new Vertex(xyz1[0],xyz1[1],xyz1[2],node.texture[nt],node.texture[nt+1]); |
316 Vertex *ver2 = new Vertex(xyz2[0],xyz2[1],xyz2[2],node.texture[nt+2],node.texture[nt+2+1]); | 316 Vertex *ver2 = new Vertex(xyz2[0],xyz2[1],xyz2[2],node.texture[nt+2],node.texture[nt+2+1]); |
317 Vertex *ver3 = new Vertex(xyz3[0],xyz3[1],xyz3[2],node.texture[nt+4],node.texture[nt+4+1]); | 317 Vertex *ver3 = new Vertex(xyz3[0],xyz3[1],xyz3[2],node.texture[nt+4],node.texture[nt+4+1]); |
318 | 318 |
319 Triangle *tri = new Triangle(ver1,ver2,ver3); | 319 Triangle *tri = new Triangle(ver1,ver2,ver3); |
320 Span *span = new Span(); | 320 Span_c *span = new Span_c(); |
321 span->viewer = viewer; | 321 span->viewer = viewer; |
322 span->p = this; | 322 span->p = this; |
323 span->create_span(tri,texture_image); | 323 span->create_span(tri,texture_image); |
324 delete ver1; | 324 delete ver1; |
325 delete ver2; | 325 delete ver2; |
333 | 333 |
334 void Polygon::draw(PolygonPack *pp) | 334 void Polygon::draw(PolygonPack *pp) |
335 { | 335 { |
336 for(int n=0; n<pp->info.size; n++) | 336 for(int n=0; n<pp->info.size; n++) |
337 { | 337 { |
338 Vertex *ver1 = new Vertex(pp->tri[n].x1,pp->tri[n].y1,pp->tri[n].z1,pp->tri[n].tex_x1,pp->tri[n].tex_y1); | 338 Vertex *ver1 = new Vertex(pp->tri[n].ver1.x,pp->tri[n].ver1.y,pp->tri[n].ver1.z,pp->tri[n].ver1.tex_x,pp->tri[n].ver1.tex_y); |
339 Vertex *ver2 = new Vertex(pp->tri[n].x2,pp->tri[n].y2,pp->tri[n].z2,pp->tri[n].tex_x2,pp->tri[n].tex_y2); | 339 Vertex *ver2 = new Vertex(pp->tri[n].ver2.x,pp->tri[n].ver2.y,pp->tri[n].ver2.z,pp->tri[n].ver2.tex_x,pp->tri[n].ver2.tex_y); |
340 Vertex *ver3 = new Vertex(pp->tri[n].x3,pp->tri[n].y3,pp->tri[n].z3,pp->tri[n].tex_x3,pp->tri[n].tex_y3); | 340 Vertex *ver3 = new Vertex(pp->tri[n].ver3.x,pp->tri[n].ver3.y,pp->tri[n].ver3.z,pp->tri[n].ver3.tex_x,pp->tri[n].ver3.tex_y); |
341 | 341 |
342 Triangle *tri = new Triangle(ver1,ver2,ver3); | 342 Triangle *tri = new Triangle(ver1,ver2,ver3); |
343 Span *span = new Span(); | 343 Span_c *span = new Span_c(); |
344 span->viewer = viewer; | 344 span->viewer = viewer; |
345 span->p = this; | 345 span->p = this; |
346 span->create_span(tri,texture_image); | 346 span->create_span(tri,texture_image); |
347 delete ver1; | 347 delete ver1; |
348 delete ver2; | 348 delete ver2; |
349 delete ver3; | 349 delete ver3; |
350 delete tri; | 350 delete tri; |
351 delete span; | 351 delete span; |
352 } | |
353 } | |
354 | |
355 | |
356 void Polygon::draw(SPANPACK *sp) | |
357 { | |
358 for(int n=0; n<sp->info.size; n++) | |
359 { | |
360 int end = sp->span[n].length_x; | |
361 Uint32 rgb; | |
362 float tex1 = sp->span[n].tex_x1; | |
363 float tex2= sp->span[n].tex_x2; | |
364 float tey1 = sp->span[n].tex_y1; | |
365 float tey2= sp->span[n].tex_y2; | |
366 int tex_xpos; | |
367 int tex_ypos; | |
368 int tex_zpos; | |
369 int x = sp->span[n].x; | |
370 int y = sp->span[n].y; | |
371 float z = sp->span[n].start_z; | |
372 float zpos = sp->span[n].end_z; | |
373 float tex_x,tex_y,tex_z; | |
374 | |
375 if(end == 1) { | |
376 //printf("end == 1\n"); | |
377 //printf("tex_x:%f tex_y:%f\n",tex1,tex2); | |
378 //if(tex1 > 1) tex1 = 1; | |
379 //if(tey1 > 1) tey1 = 1; | |
380 tex_xpos = (int)((sp->span[n].tex_height-1) * tex1); | |
381 tex_ypos = (int)((sp->span[n].tex_width-1) * tey1); | |
382 tex_zpos = (int)z; | |
383 //printf("tex_xpos:%d tex_ypos:%d\n",tex_xpos,tex_ypos); | |
384 //printf("image->h:%d tex_x:%f\n",(int)sp->span[n].tex_height,tex1); | |
385 rgb = get_rgb(tex_xpos,tex_ypos); | |
386 viewer->write_pixel(x,y,zpos,rgb); | |
387 }else { | |
388 //printf("end != 1\n"); | |
389 for(int j = 0; j < end; j++) { | |
390 tex_x = tex1*(end-1-j)/(end-1) + tex2*j/(end-1); | |
391 tex_y = tey1*(end-1-j)/(end-1) + tey2*j/(end-1); | |
392 tex_z = z*(end-1-j)/(end-1) + zpos*j/(end-1); | |
393 if(tex_x > 1) tex_x = 1; | |
394 if(tex_y > 1) tex_y = 1; | |
395 tex_xpos = (int)((sp->span[n].tex_height-1) * tex_x); | |
396 tex_ypos = (int)((sp->span[n].tex_width-1) * tex_y); | |
397 //printf("tex_xpos:%d tex_ypos:%d\n",tex_xpos,tex_ypos); | |
398 //printf("z:%f zpos:%f tex_z:%f\n",z,zpos,tex_z); | |
399 //printf("tex_x:%f tex_y:%f\n",tex_x,tex_y); | |
400 rgb = get_rgb(tex_xpos,tex_ypos); | |
401 viewer->write_pixel(j+x,y,tex_z,rgb); | |
402 } | |
403 } | |
352 } | 404 } |
353 } | 405 } |
354 | 406 |
355 | 407 |
356 /* | 408 /* |