Apply screen Transform:
fullx = num_viewports_w;
fully = num_viewports_h;
calculate a screen transformation where the whole area [-0.5..fullx- 0.5][-0.5..fully - 0.5] can be displayed
apply the transformation
save the matrix
gltranslate(s->x / s->width,s->y / s->height);
PAINTING:
for all viewports
{
moveScreenViewport
paint viewport;
-moveScreenViewport
}
MOUSETRANSFORMATION:
mx/my = mouse position
unproject p1(mx,my,0) and p2(mx,my,-1)
calulate the vector v = p2' - p1'
find the pint pm there the line l = p1' + alpha v hits the plane at z = 0;
pm.x + 0.5;
pm.y + 0.5;
pm.x * screen->width
pm.y * screen->height
pm = mouse position