void IMDLsphere (Model *m, int num, double r) { int i,j,k; double a,b,c,d,e,f,g,l; a = num/2; b = 0; c = M_PAI*1.5; d = M_PAI*1.5; e = 2.0*M_PAI/num; f = num; g = 0; m->num_s = num*num/2; m->surf = (Surface *)malloc(sizeof(Surface)*(m->num_s)); for(k = 0; k < a;k++){ if(k == 0){ for(j=g;j < f;j++){ m->surf[j].num_v =3; m->surf[j].vertex = (Vertex *)malloc(sizeof(Vertex)*(m->surf[j].num_v)); m->surf[j].vertex[0].x=r*cos(c+(2.0*M_PAI/num*j))*cos(c+(2.0*M_PAI/num*k)); m->surf[j].vertex[0].y=r*cos(c+(2.0*M_PAI/num*k))*sin(c+(2.0*M_PAI/num*j)); m->surf[j].vertex[0].z=r*sin(d); m->surf[j].vertex[1].x=r*cos(c+(2.0*M_PAI/num*(j+1)))*cos(c+(2.0*M_PAI/num*(k+1))); m->surf[j].vertex[1].y=r*cos(c+(2.0*M_PAI/num*(k+1)))*sin(c+(2.0*M_PAI/num*(j+1))); m->surf[j].vertex[1].z=r*sin(d+e); m->surf[j].vertex[2].x=r*cos(c+(2.0*M_PAI/num*j))*cos(c+(2.0*M_PAI/num*(k+1))); m->surf[j].vertex[2].y=r*cos(c+(2.0*M_PAI/num*(k+1)))*sin(c+(2.0*M_PAI/num*j)); m->surf[j].vertex[2].z=r*sin(d+e); } } else if(k == a-1){ for(j=g;j < f;j++){ m->surf[j].num_v =3; m->surf[j].vertex = (Vertex *)malloc(sizeof(Vertex)*(m->surf[j].num_v)); m->surf[j].vertex[0].x=r*cos(c+(2.0*M_PAI/num*j))*cos(c+(2.0*M_PAI/num*k)); m->surf[j].vertex[0].y=r*cos(c+(2.0*M_PAI/num*k))*sin(c+(2.0*M_PAI/num*j)); m->surf[j].vertex[0].z=r*sin(d); m->surf[j].vertex[1].x=r*cos(c+(2.0*M_PAI/num*(j+1)))*cos(c+(2.0*M_PAI/num*k)); m->surf[j].vertex[1].y=r*cos(c+(2.0*M_PAI/num*k))*sin(c+(2.0*M_PAI/num*(j+1))); m->surf[j].vertex[1].z=r*sin(d); m->surf[j].vertex[2].x=r*cos(c+(2.0*M_PAI/num*j))*cos(c+(2.0*M_PAI/num*(k+1))); m->surf[j].vertex[2].y=r*cos(c+(2.0*M_PAI/num*(k+1)))*sin(c+(2.0*M_PAI/num*j)); m->surf[j].vertex[2].z=r*sin(d+e); } } else { for(j=g;j < f;j++){ m->surf[j].num_v =4; m->surf[j].vertex = (Vertex *)malloc(sizeof(Vertex)*(m->surf[j].num_v)); m->surf[j].vertex[0].x=r*cos(c+(2.0*M_PAI/num*j))*cos(c+(2.0*M_PAI/num*k)); m->surf[j].vertex[0].y=r*cos(c+(2.0*M_PAI/num*k))*sin(c+(2.0*M_PAI/num*j)); m->surf[j].vertex[0].z=r*sin(d); m->surf[j].vertex[1].x=r*cos(c+(2.0*M_PAI/num*(j+1)))*cos(c+(2.0*M_PAI/num*k)); m->surf[j].vertex[1].y=r*cos(c+(2.0*M_PAI/num*k))*sin(c+(2.0*M_PAI/num*(j+1))); m->surf[j].vertex[1].z=r*sin(d); m->surf[j].vertex[2].x=r*cos(c+(2.0*M_PAI/num*(j+1)))*cos(c+(2.0*M_PAI/num*(k+1))); m->surf[j].vertex[2].y=r*cos(c+(2.0*M_PAI/num*(k+1)))*sin(c+(2.0*M_PAI/num*(j+1))); m->surf[j].vertex[2].z=r*sin(d+e); m->surf[j].vertex[3].x=r*cos(c+(2.0*M_PAI/num*j))*cos(c+(2.0*M_PAI/num*(k+1))); m->surf[j].vertex[3].y=r*cos(c+(2.0*M_PAI/num*(k+1)))*sin(c+(2.0*M_PAI/num*j)); m->surf[j].vertex[3].z=r*sin(d+e); } } g = g+num; f = f+num; d = d+e; } }