У меня есть окно SDL, содержащее окно просмотра OpenGL.Когда пользователь изменяет размер окна, перетаскивая край окна, я бы хотел, чтобы (1) окно просмотра расширялось, чтобы заполнить окно, и (2) чтобы содержимое окна просмотра оставалось неподвижным.
Дляпример:
------------------------
| | |
| <------ | |
| | X |
| <------ | |
| | |
------------------------
Если левый край окна перетащить дальше влево, то объект X в окне просмотра OpenGL должен оставаться неподвижным.
Я обнаружил, что код I 'm вызов событий SDL_VIDEORESIZE не только не делает этого, но и вызывает некоторое ужасное мерцание:
SDL_FreeSurface(window);
window = SDL_SetVideoMode(_w, _h, 32, SDL_OPENGL | SDL_RESIZABLE);
glViewport(0, 0, _w, _h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
const double w_2 = _w/2.0;
const double h_2 = _h/2.0;
gluOrtho2D(-w_2, w_2, -h_2, h_2);
// adjust model matrix
const double s_cosT = _scale*cos(_theta);
const double s_sinT = _scale*sin(_theta);
model[ 0] = s_cosT;
model[ 1] = s_sinT;
model[ 4] = -s_sinT;
model[ 5] = s_cosT;
model[12] = s_cosT*_x - s_sinT*_y;
model[13] = s_sinT*_x + s_cosT*_y;
glMatrixMode(GL_MODELVIEW);
glLoadMatrixd(model);
Что этот код, кажется, делает при изменении размера окна, чтобы перевести то, что было в центре старогоокно просмотра должно быть в центре нового окна просмотра.Тот же код работал, как я и ожидал, при использовании с GLUT вместо SDL - с GLUT, изменение размера окна путем перетаскивания краев не приводило к повторному центрированию содержимого области просмотра.
Что объясняет эту разницу?Как я могу это исправить?