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 /*