Народный учебник по OpenGL


Урок 26. Реалистичное отражение с использование буфера шаблона и отсечения. - часть 15


 

После перемещения и поворота мы рисуем мяч.

 

  glEnable(GL_LIGHTING);// Включить освещение

  glDisable(GL_BLEND);  // Отключить смешивание

  glTranslatef(0.0f, height, 0.0f);// Перемещение мяча

  glRotatef(xrot, 1.0f, 0.0f, 0.0f);// Поворот по оси X

  glRotatef(yrot, 0.0f, 1.0f, 0.0f);// Поворот по оси Y

  DrawObject();         // Рисование объекта

 

Следующий код служит для поворота мяча по осям X и Y. Для поворота по оси X увеличивается переменная xrot на значение переменной xrotspeed. Для поворота по оси Y увеличивается переменная yrot на значение переменной yrotspeed. Если xrotspeed имеет слишком большое позитивное или негативное значение, мяч будет крутиться быстрее, чем, если бы xrotspeed было близко к нулю. То же касается и yrotspeed. Чем больше yrotspeed, тем быстрее мяч крутится по оси Y.

 

Перед тем, как вернуть TRUE, выполняется команда glFlush(). Эта команда указывает OpenGL выполнить все команды, переданные ему в конвейер, что помогает предотвратить мерцание на медленных видеокартах.

 

  xrot += xrotspeed; // Обновить угол вращения по X

  yrot += yrotspeed; // Обновить угол вращения по Y

  glFlush();   // Сброс конвейера OpenGL

  return TRUE; // Нормальное завершение

}

 

Следующий код обрабатывает нажатия клавиш. Первые 4 строки проверяют нажатие вами 4 клавиш (для вращения мяча вправо, влево, вниз, вверх).

 

Следующие 2 строки проверяют нажатие вами клавиш ‘A’ или ‘Z’. Клавиша  ‘A’ предназначена для приближения сцены, клавиша  ‘Z’ – для отдаления.

 

Клавиши ‘PAGE UP’ и ’ PAGE UP’ предназначены для вертикального перемещения мяча.

 

void ProcessKeyboard()  // Обработка клавиатуры

{

  if (keys[VK_RIGHT])  yrotspeed += 0.08f;// Вправо

  if (keys[VK_LEFT])  yrotspeed -= 0.08f; // Влево

  if (keys[VK_DOWN])  xrotspeed += 0.08f; // Вверх

  if (keys[VK_UP])  xrotspeed -= 0.08f;   // Вниз

 

  if (keys['A'])    zoom +=0.05f; // Приближение

  if (keys['Z'])    zoom -=0.05f; // Отдаление




- Начало -  - Назад -  - Вперед -