Введение в программирование трехмерных игр с DX9

       

Загрузка файла RAW



13.1.2. Загрузка файла RAW

Поскольку файл RAW— это всего лишь непрерывный массив байтов, мы можем просто прочитать его целиком с помощью приведенного ниже метода. Обратите внимание, что переменная _heightmap — это член класса Terrain, определеный следующим образом: std::vector<int> _heightmap;.

bool Terrain::readRawFile(std::string fileName) { // Высота для каждой вершины std::vector<BYTE> in(_numVertices);

std::ifstream inFile(fileName.c_str(), std::ios_base::binary);

if(inFile == 0) return false;

inFile.read( (char*)&in[0], // буффер in.size()); // количество читаемых в буфер байт

inFile.close();

// копируем вектор BYTE в вектор int _heightmap.resize(_numVertices); for(int i = 0; i < in.size(); i++) _heightmap[i] = in[i];

return true; }

Обратите внимание, что мы копируем вектор байтов в вектор целых чисел; это делается для того, чтобы потом мы могли масштабировать значения высот для выхода за пределы диапазона [0, 255].

Единственным ограничением данного метода является то, что количество байт в читаемом файле RAW должно быть не меньше количества вершин в сетке ландшафта. Следовательно, если вы считываете файл RAW размером 256 × 256, то должны создать ландшафт в котором будет не более 256 × 256 вершин.



Содержание раздела