Mercurial > hg > Members > kono > Cerium
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() |