void Scene::BuildCornellBoxScene(std::vector<Shape*> &objects) { camera = new Camera( Point(-260, 0, 90), Point(-199, 0, 90) ); float lightEnergy = 35e8; lights.push_back(new SphereLight(Point(0, 0, 160), 3, Color(lightEnergy,lightEnergy,lightEnergy),1)); Color walls(0.1f,0.1f,0.1f); Material* white = new Material(Ambient(0.3,0.3,0.3),Diffuse(0.9, 0.9, 0.9),walls); AddObject("files\\cornell_box\\cornell_box_floor.3ds", new Material(Color(0.3,0.3,0.3),Color(0.9,0.9,0.9),walls, Reflect(0.2, 0.2, 0.2)), objects); AddObject("files\\cornell_box\\cornell_box_ceil.3ds", white, objects); AddObject("files\\cornell_box\\cornell_box_right_wall.3ds", new Material(Color(0.,0.1,0.),Color(0.4,1,0.4),walls), objects); AddObject("files\\cornell_box\\cornell_box_back.3ds", white, objects); AddObject("files\\cornell_box\\cornell_box_left_wall.3ds", new Material(Color(0.1,0.,0.),Color(1,0.4,0.4),walls), objects); AddObject("files\\cornell_box\\cornell_box_box1.3ds", white, objects); AddObject("files\\cornell_box\\cornell_box_box2.3ds", white, objects); objects.push_back(new Sphere(Point(-35,-45,20),15,new Material(Ambient(0,0,0),Diffuse(0,0,0),Specular(0,0,0), Reflect(0,0,0), Refract(1,1,1), 1.51, 1), Shape::GetUniqueID())); objects.push_back(new Sphere(Point(-50,50,15),15,new Material(Ambient(0,0,0),Diffuse(0,0,0),Specular(0,0,0), Reflect(1,1,1)), Shape::GetUniqueID() )); }
LOCAL COMP_TYPE *clone_elliptical_comp_type( ELLIPSOID *ellip, COMP_TYPE *ct, Front *front, INIT_PHYSICS *ip) { _ELLIPTICAL *el, *nel; COMP_TYPE *nct; INTERFACE *intfc = front->interf; int i, dim; nct = comp_type(new_component(NEW_COMP)); set_elliptical_comp_type(nct,ip); nel = Elliptical(nct); nel->ellipsoid = ellip; switch (ct->type) { case ELLIPTICAL: dim = intfc->dim; el = Elliptical(ct); nel->rstate = copy_random_state_structure(el->rstate,intfc); ft_assign(nel->state,el->state,front->sizest); ft_assign(nel->wkstate[0],el->wkstate[0],front->sizest); ft_assign(nel->wkstate[1],el->wkstate[1],front->sizest); for (i = 0; i < dim; ++i) nel->weight[i] = el->weight[i]; nel->r0 = el->r0; nel->rw1d = el->rw1d; nel->stratification_type = el->stratification_type; break; case AMBIENT: nel->rstate = NULL; set_state(nel->state,TGAS_STATE,Ambient(ct)); break; default: screen("ERROR in copy_elliptical_comp_type(), " "comp_type %s not supported\n",comp_type_name(ct->type)); clean_up(ERROR); break; } return nct; } /*end clone_elliptical_comp_type*/
/*ARGSUSED*/ EXPORT void get_state_ambient( float *coords, Locstate s, COMP_TYPE *ct, HYPER_SURF *hs, INTERFACE *intfc, INIT_DATA *init, int stype) { Locstate ct_state = Ambient(ct); int save_stype = stype; debug_print("init_states","Entered get_state_ambient()\n"); if ( ct->type != AMBIENT ) { screen("\nERROR in get_state_ambient(), " "inconsistent comp_type->type\n"); clean_up(ERROR); } if ( ct_state != NULL ) { if(g_composition_type() == MULTI_COMP_NON_REACTIVE) stype = TGAS_STATE; set_state(s,stype,ct_state); //if(coords[0] > -0.15 && coords[2] > 3.9) //Vel(s)[0] = 0.0; get_constant_state_init(s, 2, coords, 0.0); /* scramjet nozzle boundary layer */ /* double r1, r2=0.099; if(coords[2] > 4.0-1.0 && coords[2] < 4.0-1.0+0.095) r1 = r2; if(coords[2] >= 4.0-1.0+0.095 && coords[2] < 4.0-1.0+0.095+0.317) r1 = r2+0.556-sqrt(sqr(0.556)-sqr(coords[2]-(4.0-1.0+0.095))); if(coords[2] >= 4.0-1.0+0.095+0.317 && coords[2] < 4.0-1.0+0.095+0.317+0.061) r1 = r2+0.556-sqrt(sqr(0.556)-sqr(0.317))+(coords[2]-(4.0-1.0+0.095+0.317))*tan(3.14159*67.5/180); if(coords[2] >= 4.0-1.0+0.095+0.317+0.061 && coords[2] <= 4.0) r1 = r2+0.556-sqrt(sqr(0.556)-sqr(0.317))+0.061*tan(3.14159*67.5/180); if(coords[2] > 3.0 && coords[2] < 4.0) { double f = get_blasius_vel_coefficient_nozzle(coords,r1); Vel(s)[2]*=f; } */ // if(coords[2] <= 3.9) // { // double f = get_blasius_vel_coefficient(coords,3.9); // Vel(s)[0]*=f; // } //TMP for the shift //get_state_shift(coords, s); } else { screen("ERROR in get_state_ambient(), NULL state encountered\n"); clean_up(ERROR); } /* This is for the oned sod-tube test problem */ /* init partial density */ if(g_composition_type() == MULTI_COMP_NON_REACTIVE) { if(debugging("sod_tube")) { Gas_param *params = Params(s); int num_comps, i; float *rho; if((num_comps = params->n_comps) != 1) { rho = pdens(s); if(coords[0] >= 0.0 && coords[0] <= 0.5) rho[0] = 0.8*Dens(s); else if(coords[0] > 0.5 && coords[0] <= 0.7) rho[0] = 0.3*Dens(s); else rho[0] = 0.1*Dens(s); rho[1] = 0.19*sqr(sin(20*3.1415927*coords[0]))*Dens(s); rho[2] = Dens(s) - rho[1] - rho[0]; if(rho[0] < 0.0 || rho[1] < 0.0 || rho[2] < 0.0) { printf("ERROR: get_state_ambient, partial den < 0.0\n"); clean_up(ERROR); } } } else if(debugging("blast_wave")) { Gas_param *params = Params(s); int num_comps, i; float *rho; if((num_comps = params->n_comps) != 1) { rho = pdens(s); rho[0] = 0.5*sqr(coords[0])*Dens(s); rho[1] = 0.5*sqr(sin(20*coords[0]))*Dens(s); rho[2] = Dens(s) - rho[1] - rho[0]; if(rho[0] < 0.0 || rho[1] < 0.0 || rho[2] < 0.0) { printf("ERROR: get_state_ambient, partial den < 0.0\n"); clean_up(ERROR); } } } set_state(s,save_stype,s); // verbose_print_state("get_state_ambient", s); } } /*end get_state_ambient*/
void ON_Light::Dump( ON_TextLog& dump ) const { ON_BOOL32 bDumpDir = false; ON_BOOL32 bDumpLength = false; ON_BOOL32 bDumpWidth = false; const char* sStyle = "unknown"; switch(Style()) { //case ON::view_directional_light: // sStyle = "view_directional_light"; // bDumpDir = true; // break; //case ON::view_point_light: // sStyle = "view_point_light"; // break; //case ON::view_spot_light: // sStyle = "view_spot_light"; // bDumpDir = true; // break; case ON::camera_directional_light: sStyle = "camera_directional_light"; bDumpDir = true; break; case ON::camera_point_light: sStyle = "camera_point_light"; break; case ON::camera_spot_light: sStyle = "camera_spot_light"; bDumpDir = true; break; case ON::world_directional_light: sStyle = "world_directional_light"; bDumpDir = true; break; case ON::world_point_light: sStyle = "world_point_light"; break; case ON::world_spot_light: sStyle = "world_spot_light"; bDumpDir = true; break; case ON::world_linear_light: sStyle = "linear_light"; bDumpDir = true; bDumpLength = true; break; case ON::world_rectangular_light: sStyle = "rectangular_light"; bDumpDir = true; bDumpLength = true; bDumpWidth = true; break; case ON::ambient_light: sStyle = "ambient_light"; break; case ON::unknown_light_style: sStyle = "unknown"; break; default: sStyle = "unknown"; break; } dump.Print("index = %d style = %s\n",LightIndex(),sStyle); dump.Print("location = "); dump.Print(Location()); dump.Print("\n"); if ( bDumpDir ) dump.Print("direction = "); dump.Print(Direction()); dump.Print("\n"); if ( bDumpLength ) dump.Print("length = "); dump.Print(Length()); dump.Print("\n"); if ( bDumpWidth ) dump.Print("width = "); dump.Print(Width()); dump.Print("\n"); dump.Print("intensity = %g%%\n",Intensity()*100.0); dump.Print("ambient rgb = "); dump.PrintRGB(Ambient()); dump.Print("\n"); dump.Print("diffuse rgb = "); dump.PrintRGB(Diffuse()); dump.Print("\n"); dump.Print("specular rgb = "); dump.PrintRGB(Specular()); dump.Print("\n"); dump.Print("spot angle = %g degrees\n",SpotAngleDegrees()); }
/*ARGSUSED*/ EXPORT void set_up_riemann_problem_region( int layer_label, int region_label, int surf_label, int ellip_label, float *coords, float *nor, SIDE ahead_side, Locstate ahead_st, Locstate st, LAYER_SYS *layer_sys, INIT_PHYSICS *ip, INIT_DATA *init) { COMP_TYPE *ct; _RAREFACTION_WAVE_1D *rw1d; LAYER *lyr, *llyr, *ulyr; Front *front = layer_sys->front; INTERFACE *intfc = front->interf; ELLIPSOID *ellip; LAYER_SURF *lsurf; Locstate sl, sr; Locstate left, right; Locstate sml, smr; float vl, vr; float pjump; float pml, pmr, uml, umr, ml, mr; float cl, cr, cml, cmr, Wl, Wr; float W, V; float dt, dh; RIEMANN_SOLVER_WAVE_TYPE l_wave, r_wave; int i, dim = front->rect_grid->dim; int w_type; size_t sizest = front->sizest; debug_print("layer","Entered set_up_riemann_problem_region()\n"); alloc_state(intfc,&left,max(sizeof(VGas),sizest)); alloc_state(intfc,&right,max(sizeof(VGas),sizest)); alloc_state(intfc,&sml,sizest); alloc_state(intfc,&smr,sizest); if (ahead_side == POSITIVE_SIDE) { sl = st; sr = ahead_st; } else { sl = ahead_st; sr = st; } set_state(right,TGAS_STATE,sr); set_state(left,TGAS_STATE,sl); lyr = layer_sys->layer[layer_label]; if (ellip_label > 0) { if (ellip_label <= lyr->num_ellips) ellip = lyr->ellip[ellip_label]; else { screen("ERROR in set_up_riemann_problem_region(), " "invalid ellip_label %d > num_ellips %d\n", ellip_label,lyr->num_ellips); clean_up(ERROR); } lsurf = NULL; } else { ellip = NULL; if (surf_label == layer_label) { lsurf = lyr->upper_surf; llyr = lyr; ulyr = layer_sys->layer[layer_label+1]; } else if (surf_label == layer_label-1) { lsurf = lyr->lower_surf; ulyr = lyr; llyr = layer_sys->layer[layer_label-1]; } else { screen("ERROR in set_up_riemann_problem_region(), " "invalid surf_label %d layer_label %d\n", surf_label,layer_label); clean_up(ERROR); } } if (ellip != NULL) { vr = Vel(right)[0]; vl = Vel(left)[0]; pjump = -ellip->surf_tension/ distance_between_positions(coords,ellip->cen,dim); } else { vr = scalar_product(Vel(right),nor,dim); vl = scalar_product(Vel(left),nor,dim); pjump = 0.0; } zero_state_velocity(right,dim); Vel(right)[0] = vr; zero_state_velocity(left,dim); Vel(right)[0] = vl; set_state_for_find_mid_state(right,right); set_state_for_find_mid_state(left,left); if (find_mid_state(left,right,pjump,&pml,&pmr,¨,&umr,&ml,&mr, &l_wave,&r_wave) != FUNCTION_SUCCEEDED) { screen("ERROR in set_up_riemann_problem_region(), " "find_mid_state() did not converge\n"); verbose_print_state("left",left); verbose_print_state("right",right); (void) printf("pjump = %g\n" "pml = %g, pmr = %g\n" "uml = %g, umr = %g\n" "ml = %g, mr = %g\n", pjump,pml,pmr,uml,umr,ml,mr); (void) printf("l_wave = %s, r_wave = %s\n", rsoln_wave_name(l_wave),rsoln_wave_name(r_wave)); clean_up(ERROR); } w_type = (l_wave == RAREFACTION) ? BACKWARD_SOUND_WAVE_TE : BACKWARD_SHOCK_WAVE; state_behind_sound_wave(left,sml,&cml,&Wl,0.0,ml,uml,pml,TGAS_STATE, w_type,l_wave,LEFT_FAMILY); w_type = (r_wave == RAREFACTION) ? FORWARD_SOUND_WAVE_TE : FORWARD_SHOCK_WAVE; state_behind_sound_wave(right,smr,&cmr,&Wr,0.0,mr,umr,pmr,TGAS_STATE, w_type,r_wave,RIGHT_FAMILY); cl = sound_speed(left); cr = sound_speed(right); W = max(fabs(Wl),fabs(Wr)); V = fabs(vl) + cl; W = max(W,V); V = fabs(vr) + cr; W = max(W,V); V = fabs(uml) + cml; W = max(W,V); V = fabs(umr) + cmr; W = max(W,V); for (dh = HUGE_VAL, i = 0; i < dim; ++i) dh = min(dh,front->rect_grid->h[i]); dt = 0.1*dh/W;/*TOLERANCE*/ layer_sys->dt = min(layer_sys->dt,dt); if (debugging("layer")) { (void) printf("States from Riemann solution\n"); verbose_print_state("left state",left); verbose_print_state("left mid state",sml); verbose_print_state("right mid state",smr); verbose_print_state("right state",right); (void) printf("l_wave = %s, r_wave = %s\n", rsoln_wave_name(l_wave),rsoln_wave_name(r_wave)); (void) printf("Wave speeds\n"); if (l_wave == RAREFACTION) { (void) printf("Left rarefaction leading edge speed = %g\n", vl-cl); (void) printf("Left rarefaction trailing edge speed = %g\n", uml-cml); } else if (l_wave == SHOCK) (void) printf("Left shock speed = %g\n",Wl); (void) printf("Contact speed = %g (uml = %g, umr = %g)\n", 0.5*(uml+umr),uml,umr); if (r_wave == RAREFACTION) { (void) printf("Right rarefaction trailing edge speed = %g\n", umr+cmr); (void) printf("Right rarefaction leading edge speed = %g\n", vr+cr); } else if (r_wave == SHOCK) (void) printf("Right shock speed = %g\n",Wr); } if (ellip == NULL) { LAYER *rlyr, *mlyr; LAYER_SURF *rlyr_le, *rlyr_te, *shock; float *nor = lsurf->nor; float vml, vmr; vml = Vel(sml)[0]; vmr = Vel(smr)[0]; for (i = 0; i < dim; ++i) { Vel(sml)[i] = vel(i,sl) + (vml-vl)*nor[i]; Vel(smr)[i] = vel(i,sr) + (vmr-vr)*nor[i]; } if (l_wave == RAREFACTION) { rlyr = add_new_layer(layer_sys,new_component(NEW_COMP)); rlyr->lower_surf = alloc_layer_surf(); rlyr->upper_surf = alloc_layer_surf(); *rlyr->upper_surf = *lsurf; *rlyr->lower_surf = *lsurf; rlyr->lower_surf->reset_position = YES; rlyr->upper_surf->reset_position = YES; rlyr->lower_surf->surf_ten = 0.0; rlyr->upper_surf->surf_ten = 0.0; ct = comp_type(rlyr->comp); set_rarefaction_wave_1d_comp_type(ct,front); rw1d = Rarefaction_wave_1d(ct); rw1d->l_or_r = LEFT_FAMILY; rw1d->zbar = lsurf->pbar[dim-1]; rw1d->tbar = -HUGE_VAL; /*To be set later */ rw1d->el_lead = rw1d->el_trail = NULL; set_state(rw1d->stl,TGAS_STATE,sl); set_state(rw1d->stt,TGAS_STATE,sml); rw1d->spl = vl-cl; rw1d->spt = vml-cml; mlyr = add_new_layer(layer_sys,new_component(NEW_COMP)); if (nor[dim-1] < 0.0) { rlyr_le = rlyr->upper_surf; rlyr_te = rlyr->lower_surf; mlyr->upper_surf = rlyr_te; mlyr->lower_surf = lsurf; rw1d->zt = rw1d->zmin = -HUGE_VAL;/*To be set later*/ rw1d->stmin = rw1d->stt; rw1d->zl = rw1d->zmax = HUGE_VAL;/*To be set later*/ rw1d->stmax = rw1d->stl; ulyr->lower_surf = rlyr_le; } else { rlyr_le = rlyr->lower_surf; rlyr_te = rlyr->upper_surf; mlyr->lower_surf = rlyr_te; mlyr->upper_surf = lsurf; rw1d->zl = rw1d->zmin = -HUGE_VAL;/*To be set later*/ rw1d->stmin = rw1d->stl; rw1d->zt = rw1d->zmax = HUGE_VAL;/*To be set later*/ rw1d->stmax = rw1d->stt; llyr->upper_surf = rlyr_le; } rw1d->lead = rlyr_le; rw1d->trail = rlyr_te; rlyr_le->l_comp = lsurf->l_comp; rlyr_le->r_comp = rlyr_te->l_comp = rlyr->comp; rlyr_le->wv_type = BACKWARD_SOUND_WAVE_LE; rlyr_te->wv_type = BACKWARD_SOUND_WAVE_TE; rlyr_te->r_comp = lsurf->l_comp = mlyr->comp; for (i = 0; i < dim; ++i) { rlyr_le->velocity[i] = rw1d->spl*nor[i]; rlyr_te->velocity[i] = rw1d->spt*nor[i]; } } else { mlyr = add_new_layer(layer_sys,new_component(NEW_COMP)); shock = alloc_layer_surf(); *shock = *lsurf; if (nor[dim-1] < 0.0) { mlyr->upper_surf = shock; mlyr->lower_surf = lsurf; ulyr->lower_surf = shock; } else { mlyr->lower_surf = shock; mlyr->upper_surf = lsurf; llyr->upper_surf = shock; } shock->l_comp = lsurf->l_comp; shock->wv_type = BACKWARD_SHOCK_WAVE; shock->r_comp = lsurf->l_comp = mlyr->comp; shock->reset_position = YES; for (i = 0; i < dim; ++i) shock->velocity[i] = Wl*nor[i]; } ct = comp_type(mlyr->comp); set_ambient_comp_type(ct,front); set_state(Ambient(ct),GAS_STATE,sml); if (r_wave == RAREFACTION) { rlyr = add_new_layer(layer_sys,new_component(NEW_COMP)); rlyr->lower_surf = alloc_layer_surf(); rlyr->upper_surf = alloc_layer_surf(); *rlyr->upper_surf = *lsurf; *rlyr->lower_surf = *lsurf; rlyr->lower_surf->reset_position = YES; rlyr->upper_surf->reset_position = YES; rlyr->lower_surf->surf_ten = 0.0; rlyr->upper_surf->surf_ten = 0.0; ct = comp_type(rlyr->comp); set_rarefaction_wave_1d_comp_type(ct,front); rw1d = Rarefaction_wave_1d(ct); rw1d->l_or_r = RIGHT_FAMILY; rw1d->zbar = lsurf->pbar[dim-1]; rw1d->tbar = -HUGE_VAL; /*To be set later */ rw1d->el_lead = rw1d->el_trail = NULL; set_state(rw1d->stl,TGAS_STATE,sr); set_state(rw1d->stt,TGAS_STATE,smr); rw1d->spl = vr+cr; rw1d->spt = vmr+cmr; rw1d->lead = rlyr_le; rw1d->trail = rlyr_te; mlyr = add_new_layer(layer_sys,new_component(NEW_COMP)); if (nor[dim-1] < 0.0) { rlyr_le = rlyr->lower_surf; rlyr_te = rlyr->upper_surf; mlyr->lower_surf = rlyr_te; mlyr->upper_surf = lsurf; rw1d->zl = rw1d->zmin = -HUGE_VAL;/*To be set later*/ rw1d->stmin = rw1d->stl; rw1d->zt = rw1d->zmax = HUGE_VAL;/*To be set later*/ rw1d->stmax = rw1d->stt; llyr->upper_surf = rlyr_le; } else { rlyr_le = rlyr->upper_surf; rlyr_te = rlyr->lower_surf; mlyr->upper_surf = rlyr_te; mlyr->lower_surf = lsurf; rw1d->zt = rw1d->zmin = -HUGE_VAL;/*To be set later*/ rw1d->stmin = rw1d->stt; rw1d->zl = rw1d->zmax = HUGE_VAL;/*To be set later*/ rw1d->stmax = rw1d->stl; ulyr->lower_surf = rlyr_le; } rlyr_le->r_comp = lsurf->r_comp; rlyr_le->l_comp = rlyr_te->r_comp = rlyr->comp; rlyr_le->wv_type = FORWARD_SOUND_WAVE_LE; rlyr_te->wv_type = FORWARD_SOUND_WAVE_TE; rlyr_te->l_comp = lsurf->r_comp = mlyr->comp; for (i = 0; i < dim; ++i) { rlyr_le->velocity[i] = rw1d->spl*nor[i]; rlyr_te->velocity[i] = rw1d->spt*nor[i]; } } else { mlyr = add_new_layer(layer_sys,new_component(NEW_COMP)); shock = alloc_layer_surf(); *shock = *lsurf; if (nor[dim-1] < 0.0) { mlyr->lower_surf = shock; mlyr->upper_surf = lsurf; llyr->upper_surf = shock; } else { mlyr->upper_surf = shock; mlyr->lower_surf = lsurf; ulyr->lower_surf = shock; } shock->r_comp = lsurf->r_comp; shock->wv_type = FORWARD_SHOCK_WAVE; shock->l_comp = lsurf->r_comp = mlyr->comp; shock->reset_position = YES; for (i = 0; i < dim; ++i) shock->velocity[i] = Wr*nor[i]; } ct = comp_type(mlyr->comp); set_ambient_comp_type(ct,front); set_state(Ambient(ct),GAS_STATE,smr); lsurf->wv_type = CONTACT; lsurf->reset_position = YES; for (i = 0; i < dim; ++i) lsurf->velocity[i] = 0.5*(vml+vmr)*nor[i]; } else { set_riemann_problem_ellipsoid(front,lyr,ellip,l_wave,r_wave, Wl,Wr,sl,sml,smr,sr,ip); } free_these(4,left,right,sml,smr); debug_print("layer","Left set_up_riemann_problem_region()\n"); } /*end set_up_riemann_problem_region*/