struct mesh * make_cylinder(int density, float radius, float height) { struct mesh *mesh; struct vertex *vtx; struct polygon *poly; int i, j; float a, da; mesh = mesh_make(); mesh->nvtx = 2*density; mesh->npoly = density; vtx = mesh->vtx = malloc(mesh->nvtx * sizeof *mesh->vtx); poly = mesh->poly = malloc(mesh->npoly * sizeof *mesh->poly); da = 2.*M_PI/density; for (a = 0., i = 0; i < density; i++, a += da) { init_coord(&vtx[i], radius, a, 0.f); init_coord(&vtx[i + density], radius, a, height); } for (i = 0; i < density; i++) { j = (i + 1)%density; init_quad(poly++, i, j, j + density, i + density); } return mesh; }
void init(void) { if(init_mblur() && init_vig() && init_quad()) { int size=0; void *data=NULL; /*glClearColor(1.0f,1.0f,1.0f,1.0f);*/ glClearColor(0.04f,0.0f,0.04f,1.0f); use_mblur(); send_mblur_samples(16.0f); /* adjust motion blur samples here */ use_vig(); send_vig_size((float)sw(),(float)sh()); vigmode(0); use_basic(); persp(proj,75.0f,asp(),0.1f,24.0f); if(fload("data/area-model.bin",&size,&data)) { add_to_vbo(&area_mod,data,size); free(data); update_vbo(); gen_texs(1,&area_tex); //if(load_tex_compressed(area_tex,"data/area-ao-texture.bin",tf_mipmap)) if(load_tex_compressed(area_tex,"data/area-texture.bin",tf_mipmap)) { const int downsample=1; /* adjust fb down-sizing here */ texmode(1); nsw=sw()/downsample; nsh=sh()/downsample; gen_texs(4,texs); gen_rbs(3,rbs); gen_fbs(4,fbos); use_fb(fbos[0]); add_fb_rb(0,rbs[0],nsw,nsh,GL_RGB8,4); /* adjust renderbuffer samples here */ add_fb_rb(0,rbs[1],nsw,nsh,GL_DEPTH_COMPONENT24,4); /* adjust renderbuffer samples here */ use_fb(fbos[1]); add_fb_tex(0,texs[0],nsw,nsh,GL_RGB8,tf_linear); add_fb_rb(0,rbs[2],nsw,nsh,GL_DEPTH_COMPONENT24,0); use_fb(fbos[2]); add_fb_tex(0,texs[1],nsw,nsh,GL_RGB8,tf_linear); add_fb_tex(1,texs[2],nsw,nsh,GL_RGBA32F,tf_linear); add_fb_rb(0,rbs[2],nsw,nsh,GL_DEPTH_COMPONENT24,0); use_fb(fbos[3]); add_fb_tex(0,texs[3],nsw,nsh,GL_RGB8,tf_linear); use_fb(0); use_rb(0); use_tex(0); } else quit(); } else quit(); } else quit(); }