1)применяя команду glScale*, надо помнить, что она изменяет длину нормалей. используйте glEnable(GL_NORMALIZE) или glEnable(GL_RESCALE_NORMAL) иначе вы будете ололо. Последнее быстрее, но не совместимо с вызовами типа glScale3f(sx,sy,sz). только glScale3f(s,s,s)
2)кладите больше заварки
3)перед использованием glReadPixels для чтения яркости, кастуйте
glPixelTransferf(GL_RED_SCALE, 0.299);
glPixelTransferf(GL_GREEN_SCALE, 0.587);
glPixelTransferf(GL_BLUE_SCALE, 0.114);
иначе вы будете жить в мире белых пикселей и кривых цветов
4)если вы хотите рисовать жирные линии возле краев экрана, уширьте viewport так чтобы он уходил на полширины линии за область отрисовки.
5)учитывай что в opengl ось игрек направлена снизу вверх везде - и на экране и в любых битмапах. используй glPixelZoom(1,-1), и поправку на высоту картинки иначе будет ололо. Помни, что если начало картинки вне поля зрения, не отрисуется вся картинка
ну и там всякое по мелочи