Вводим переменные:
#include "afxwin.h" #include "GL/gl.h" #include "GL/glu.h" #include "GL/glaux.h" int x; int y; //......
Изменяем реакцию на нажатие клавиш:
void CALLBACK ProcUp (void) { y=y-20; display(); } void CALLBACK ProcDown (void) { y=y+20; display(); } void CALLBACK RrocLeft(void) { x=x-20; display(); } void CALLBACK ProcRight(void) { x=x+20; display(); }
Изменение display:
void CALLBACK display (void) { glClear(GL_COLOR_BUFFER_BIT); //...... gluLookAt(x, y, 300, 150, 150, 0, 0, 1, 0); //...... }
Начальные установки:
int main(int argc, char** argv) { x=350; y=350; //...... }
Скомпилируйте и запустите. Нажмайте клавиши и вы полетите !!! Да будет не очень плавно. Изображение будет пропадать частично. Но вы полетите.
Конечно существуют буферы , и настройки которые улучшают изображение. Поэтому поводу и по поводу всех моих шагов я перескажу притчу из Нового Завета.
Посеял хозяин пшеницу. Прошло время и он послал слуг посмотреть как дела. Пришли слуги и говорят, там вместе с пшеницей плевела. Что нам делать? Вырывать плевела? Остановитесь неразумные. Вместе с плевелами вы вырвете пшеницу. Дождитесь осени, соберите всё что выросло, отделите плевела от пшеницы. Сожгите плевела, а пшеницу поместите в амбар.
Итак, давайте отвлечемся от недостатков и сконцентрируемся на реультате.
Как видете функцию display можно вызывать в любом месте. Этим мы и воспользовались. Поменяли параметры gluLookAt (y, x, .... на переменные. Которые изменяем при нажатии и вызываем перерисовку. Еще я добавил функцию glClear для очистки экрана. Закомментируйте её и вы получите интересный результат.
Очишайте экран:
glClear(GL_COLOR_BUFFER_BIT);
Для перерисовки вызываете функцию display:
void CALLBACK RrocLeft(void) { //...... display(); }