AO::AO( Point3f _dir, Mol &m) { dir=_dir.Normalize(); // orthonormal basis Point3f ax,ay,az=dir; ax=az^Point3f(1,0,0); if (ax.SquaredNorm()<0.1) ax=az^Point3f(0,1,0); ax=ax.Normalize(); ay=(az^ax).Normalize(); // project... m.Transform(ax,ay,az); int target=32; // bufx=bufy=target; float bufscalex=target/(m.tx1-m.tx0); float bufscaley=target/(m.ty1-m.ty0); bufscale=(bufscalex<bufscaley)?bufscalex:bufscaley; m.ScaleTransl(bufscale); CubeMapSamp::Transform(ax,ay,az); printf("Scale=%f\n",bufscale); buf.resize(target*target,infty); for (int i=0; i<m.atom.size()-1; i++) { QAtom &a=m.atom[i]; CheckAtom(a); RenderSphere( a.trp[0], a.trp[1], a.trp[2], a.trr ); PrintBuffer(); } }