void Set_Material_And_Light (int m, int l) { Current_Material = l; Set_Light(); Current_Material = m; Set_Material(); }
int Next_Material_And_Light() { Current_Material = (Current_Material + 1) % Num_Materials; Set_Material(); Set_Light(); return Current_Material+1; }
void AD_Scene3D::do_efx2D(double pos) // si suppone pos compreso tra [0..1] { float4 frame, ft; AD_Tria3D *t; int j, m, num_tria; frame=(float)( ((pos-fstartpos)/(fendpos-fstartpos)) *(num_frame-1)); // consideriamo la pos nel range [0;1] pos=(((float)(pos)-fstartpos)/(fendpos-fstartpos)); num_to_paint_trasparent=0; list_to_paint_trasparent=list_trasparent; list_to_paint_trasparent_copy=list_trasparent; for (j=0; j<num_materials; j++) { ft=128; materials[j].my_tria_list=materials[j].my_tria_list_copy; // se il materiale e' trasparente non additivo if ((materials[j].flags & IS_TRASPARENT) && (materials[j].trasparencytype!=ALPHA_MAP)) { if ((material_tracks) && (material_tracks[j].trasparency_track) && (material_tracks[j].trasparency_track->numkey>1) ) { material_tracks[j].trasparency_track->get_data(frame, &ft); if (ft<0) ft=0; if (ft>255) ft=255; materials[j].trasparency=(int)ft; } } } for (j=num_materials; j<num_materials+2; j++) materials[j].my_tria_list=materials[j].my_tria_list_copy; // PIPELINE GEOMETRICA screen_Xadd=((float)image->width)/2.0f; screen_Yadd=((float)image->height)/2.0f; choose_current_camera(frame); current_telecamera->build_cameramatrix(frame); // ADrender !!! Set_ZRanges(current_telecamera->znear, current_telecamera->zfar); for (j=0; j<num_omni; j++) omni[j].update(frame, current_telecamera); counter_for_resetting_vertex+=4; // NB: cosi' non sovrascriviamo // i bit di zclip dei vertici for (j=0; j<num_objects; j++) { if (objects[j]->skinned_object==(AD_Object3D *)NULL) objects[j]->build_objectmatrix(frame); } for (j=0; j<num_objects; j++) { if (objects[j]->skinned_object!=(AD_Object3D *)NULL) objects[j]->build_objectmatrix(frame); } for (j=0; j<num_objects; j++) { objects[j]->paint(frame, current_telecamera, omni); } // ADrender !!! Begin_Scene(); // FASE DI RASTERING for (j=0; j<num_materials+2; j++) { num_tria=(materials[j].my_tria_list - materials[j].my_tria_list_copy); if ((num_tria>0) && (materials[j].trasparencytype==OFF) && (!(materials[j].flags & IS_TRASPARENT))) { if (materials[j].zsorting==ON) { list_to_paint=(AD_Tria3D **)materials[j].my_tria_list_copy; qsort_nontrasparent_tria (0, num_tria-1); } currentmaterial_flags=materials[j].flags; // ADrender !!! currentmaterial_drawproc=Set_Material(&materials[j]); for (m=0; m<num_tria; m++) { t=(AD_Tria3D *)materials[j].my_tria_list_copy[m]; if (((t->v1->flags + t->v2->flags + t->v3->flags) & 3)==0) { currentmaterial_drawproc(t->sp1, t->sp2, t->sp3); } else { tria_paint_general(t); } } } } // Ora disegno i triangoli trasparenti num_tria=(list_to_paint_trasparent-list_to_paint_trasparent_copy); if (num_tria>0) { Begin_ExclusiveTransparency(); qsort_trasparent_tria(0, num_tria-1); for (j=0; j<num_tria; j++) { t=list_to_paint_trasparent_copy[j]; currentmaterial_flags=t->materiale->flags; // ADrender !!! currentmaterial_drawproc=Set_Material(t->materiale); if (((t->v1->flags + t->v2->flags + t->v3->flags) & 3)==0) { currentmaterial_drawproc(t->sp1, t->sp2, t->sp3); } else tria_paint_general(list_to_paint_trasparent_copy[j]); } } End_Scene(); End_ExclusiveTransparency(); }