void IMDLtorus(Model *m, int num, double r1, double r2){ int i,j; double cx,cy,cx2,cy2; m->num_s = num * num; m->surf = (Surface *)malloc(sizeof(Surface)*(m->num_s)); for(i=0;isurf[i*num+j].num_v = 4; m->surf[i*num+j].vertex = (Vertex *)malloc(sizeof(Vertex)*(m->surf[j].num_v)); m->surf[i*num+j].vertex[0].x = cx2 + r2 * cos(2.0*M_PAI/num*j) * cos(2.0*M_PAI/num*(i+1)); m->surf[i*num+j].vertex[0].y = cy2 + r2 * cos(2.0*M_PAI/num*j) * sin(2.0*M_PAI/num*(i+1)); m->surf[i*num+j].vertex[0].z = r2 * sin(2.0*M_PAI/num*j); m->surf[i*num+j].vertex[1].x = cx2 + r2 * cos(2.0*M_PAI/num*(j+1)) * cos(2.0*M_PAI/num*(i+1)); m->surf[i*num+j].vertex[1].y = cy2 + r2 * cos(2.0*M_PAI/num*(j+1)) * sin(2.0*M_PAI/num*(i+1)); m->surf[i*num+j].vertex[1].z = r2 * sin(2.0*M_PAI/num*(j+1)); m->surf[i*num+j].vertex[2].x = cx + r2 * cos(2.0*M_PAI/num*(j+1)) * cos(2.0*M_PAI/num*i); m->surf[i*num+j].vertex[2].y = cy + r2 * cos(2.0*M_PAI/num*(j+1)) * sin(2.0*M_PAI/num*i); m->surf[i*num+j].vertex[2].z = r2 * sin(2.0*M_PAI/num*(j+1)); m->surf[i*num+j].vertex[3].x = cx + r2 * cos(2.0*M_PAI/num*j) * cos(2.0*M_PAI/num*i); m->surf[i*num+j].vertex[3].y = cy + r2 * cos(2.0*M_PAI/num*j) * sin(2.0*M_PAI/num*i); m->surf[i*num+j].vertex[3].z = r2 * sin(2.0*M_PAI/num*j); } } }