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


Урок 10. Загрузка и перемещение в трехмерном мире - часть 2


} TRIANGLE;                      // Обзовём это TRIANGLE

Треугольник, как и любой многоугольник, определяется вершинами. Вершина содержит реальные для использования OpenGL’ом данные. Мы определяем каждую точку треугольника её расположением в 3D пространстве (x, y, z) и координатами на текстуре (u, v).


 

typedef struct tagVERTEX         // Создаём стр-ру нашей вершины

{

      float x, y, z;    // 3D координаты

      float u, v;                // Координаты на текстуре

} VERTEX;                        // Обзовём это VERTEX

Загрузка файлов

Сохранение данных нашего мира внутри программы делает её слишком статичной и скучной. Загрузка миров с диска, тем не менее, даёт больше гибкости в тестировании различных миров, избавляя от перекомпиляции нашей программы. Другое преимущество в том, что пользователь может использовать новые уровни и модифицировать их, не задумываясь о коде нашей программы. Тип файла данных, который мы собираемся использовать будет текстовым. Это сделано для того, чтобы облегчить редактирование мира и уменьшить код программы. Оставим двоичные файлы на дальнейшее рассмотрение.

 

Естественный вопрос: как мы извлечем данные из нашего файла? Во-первых, мы создадим новую функцию SetupWorld(). Определим наш файл как filein и откроем его в режиме только чтение. А так же, когда закончим, мы должны не забыть закрыть наш файл. Давайте посмотрим на следующий код:

 

// Декларация выше: char* worldfile = "data\\world.txt";

void SetupWorld()                        // Установка нашего мира

{

      FILE *filein;                      // Файл для работы

      filein = fopen(worldfile, "rt");   // Открываем наш файл

                ...

      (считываем наши данные)

                ...

      fclose(filein);                     // Закрываем наш файл

      return;                             // Возвращаемся назад

}

 

Следующее, чему мы уделим внимание, будет собственно считывание каждой строки текста в переменную. Это можно выполнить очень многими способами. Одна проблема в том, что не все строки содержат значимую информацию. Пустые линии и комментарии не должны быть считаны. Теперь создадим функцию readstr(). Она будет считывать одну значимую строку в инициализированную строку. Вот этот код:




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



Книжный магазин