comparison TaskManager/Test/simple_render/polygon.cpp @ 85:9b96b190cb73

*** empty log message ***
author gongo
date Wed, 27 Feb 2008 04:25:04 +0900
parents 811ffebd8deb
children a309cf4eafc5
comparison
equal deleted inserted replaced
84:c2e178b3415f 85:9b96b190cb73
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;
331 } 331 }
332 332
333 333
334 void Polygon::draw(PolygonPack *pp) 334 void Polygon::draw(PolygonPack *pp)
335 { 335 {
336 Vertex *ver1 = new Vertex(0.0f, 0.0f, 0.0f, 0.0f, 0.0f); 336 for(int n=0; n<pp->info.size; n++)
337 Vertex *ver2 = new Vertex(0.0f, 0.0f, 0.0f, 0.0f, 0.0f); 337 {
338 Vertex *ver3 = new Vertex(0.0f, 0.0f, 0.0f, 0.0f, 0.0f); 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 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 for (int n = 0; n < pp->info.size; n++) { 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 //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); 341
342 //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); 342 Triangle *tri = new Triangle(ver1,ver2,ver3);
343 //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); 343 Span_c *span = new Span_c();
344 344 span->viewer = viewer;
345 ver1->set(pp->tri[n].x1,pp->tri[n].y1,pp->tri[n].z1,pp->tri[n].tex_x1,pp->tri[n].tex_y1); 345 span->p = this;
346 ver2->set(pp->tri[n].x2,pp->tri[n].y2,pp->tri[n].z2,pp->tri[n].tex_x2,pp->tri[n].tex_y2); 346 span->create_span(tri,texture_image);
347 ver3->set(pp->tri[n].x3,pp->tri[n].y3,pp->tri[n].z3,pp->tri[n].tex_x3,pp->tri[n].tex_y3); 347 delete ver1;
348 348 delete ver2;
349 Triangle *tri = new Triangle( ver1, ver2, ver3); 349 delete ver3;
350 Span *span = new Span(); 350 delete tri;
351 span->viewer = viewer; 351 delete span;
352 span->p = this; 352 }
353 span->create_span(tri,texture_image); 353 }
354 delete tri; 354
355 delete span; 355
356 } 356 void Polygon::draw(SPANPACK *sp)
357 357 {
358 delete ver1; 358 for(int n=0; n<sp->info.size; n++)
359 delete ver2; 359 {
360 delete ver3; 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 }
404 }
361 } 405 }
362 406
363 407
364 /* 408 /*
365 void Polygon::create_scene_graph_pack() 409 void Polygon::create_scene_graph_pack()