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


             

Если текстура не загружена возвращаем


int InitGL(GLvoid)            // Все начальные настройки OpenGL здесь
{
  if (!LoadGLTextures())      // Переход на процедуру загрузки текстуры
  {
    return FALSE;             // Если текстура не загружена возвращаем FALSE
  }
 
  glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // Черный фон
  glClearDepth(1.0);          // Установка буфера глубины
  glEnable(GL_DEPTH_TEST);    // Разрешение теста глубины
  glShadeModel(GL_SMOOTH);    // Разрешить плавное закрашивание
  glEnable(GL_TEXTURE_2D);    // Разрешение наложения текстуры
  return TRUE;                // Инициализация завершена OK
}
 
Теперь самое интересное. Наш код рисования! Мы начинаем как обычно. Мы очищаем фон и буфер глубины. Затем мы сбрасываем матрицу вида, и перемещаемся на 2 единицы вглубь экрана так, чтобы мы могли видеть нашу сцену.
 
int DrawGLScene(GLvoid)          // Здесь мы все рисуем
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);      // Очистка экрана и буфера глубины
  glLoadIdentity();              // Сброс матрицы вида
  glTranslatef(0.0f,0.0f,-2.0f); // Перемещение вглубь экрана на 2 единицы
Первая строка ниже выбирает текстуру 'эмблемы' сайта NeHe. Мы наложим текстуру на экран, используя четырехугольник. Мы задаем четыре текстурных координаты совместно с четырьмя вершинами.

Дополнение от Джонатана Роя: помните, что OpenGL - графическая система на основе вершин. Большинство параметров, которые Вы задаете, регистрируются как атрибуты отдельных вершин. Текстурные координаты - один из таких атрибутов. Вы просто задаете соответствующие текстурные координаты для каждой вершины многоугольника, и OpenGL автоматически заполняет поверхность между вершинами текстурой, в процессе известном как интерполяция. Интерполяция - стандартная геометрическая техника, которая позволяет OpenGL определить, как данный параметр изменяется между вершинами, зная только значение, которое параметр имеет в вершинах непосредственно.

Как и в предыдущих уроках, мы представим, что мы на внешней стороне четырехугольника и назначаем координаты текстуры следующим образом: (0.0, 0.0) нижний левый угол, (0.0, 1.0)  верхний левый угол, (1.0, 0.0) нижний правый, и (1.0, 1.0) верхний правый. А теперь, с учетом этой настройки, Вы можете указать, какие координаты текстуры соответствуют точке в середине четырехугольника? Правильно, (0.5, 0.5). Но в коде Вы ни где не задавали эту координату, не так ли? Когда рисуется четырехугольник, OpenGL вычисляет это за Вас. И просто волшебство то, что он это делает безотносительно к позиции, размера, или ориентации многоугольника!

Содержание  Назад  Вперед