Со временем будет редактор, и данная статья устареет, но пока его нет, писать будем в блокноте) Итак, из чего состоит этот формат? Тут есть 4 пункта (по порядку):
1) Данные о камере (пока, только ее начальное положение)
2) список треугольников (тут говориться, что с чем связывается для их образования)
3) список вершин (тут расставляются различные координаты)
4) список текстур (они лежат в той же папке, что и игра)
Итак, #1:
Начинается и заканчивается 1 пункт тремя координатами, записаными через пробел. Дробная часть отделяется ТОЧКОЙ, а не запятой. Это координаты по X, Y, Z.
X и Z - именно Z а не Y - координаты на плоскости, X - вправо, Z - вперед, а координата Y - ВЫСОТА.
Например:
Т.е. X = 3 Y = 1 Z = 5 и камера смещена на 3 еденицы вправо, на 1 еденицу вверх, и на 5 едениц вперед. Это не так уж и сложно. Пункт #2:
Вначале, стоит число, задающее кол-во треугольников. Обязательно, при КАЖДОМ изменение количества треугольников ПРОВЕРЯТЬ и ИЗМЕНЯТЬ это число. Иначе, движок вылетит с ошибкой)
Кол-во треугольник может быть ТОЛЬКО ЦЕЛЫМ и ПОЛОЖИТЕЛЬНЫМ. Слишком большое также не желательно, поскольку ограничения на их кол-во не существуе и тогда:
- у компа просто не хватит памяти
- поскольку, пока рисуются все треугольники в списке, FPS будет очень мал и игра просто зависнет
- скорее всего, движок вылетит с ошибкой
Итак, число написано и перепроверено, теперь необходимо писать свойства треугольников.
В них пишется:
- Номера трех вершин, которые связываются в треугольник.
- Номер текстуры, используемой для окраски этого треугольника.
Все номера вершин и текстур отсчитываются с НУЛЯ, а не единицы! Разумеется,все они целые, положительые и не превышают число вершин и текстур (об этих числах в пунктах #3 и #4)
Пример:
Итак, берем вершину номер 1, номер 3 и 0, окрашиваем их текстурой под номером 0 и радуемся, что его увидели) Или нет? Ведь он односторонне-проецируемый! Т.е. когда вы создадите список вершин (#3), посмотрите на их координаты, вы должны помнить - Если смотреть на треугольник, визуально, точки должны идти ПО ЧАСОВОЙ СТРЕЛКЕ! Иначе, вы увидете треугольник только с обратной стороны! Итак, если номера вершин в файле записаны в порядке A B C, То да данной картинке левый преугольник будет виден (порядок обхода вершин по часовой стрелка), а правый - нет (порядок обхода против часовой):
Теперь полный пример части #2:
Quote
3
1 2 0 0
3 4 2 0
5 3 2 1
Итак, здесь 3 треугольника (кэп). НУЛЕВОЙ треугольник (порядок как и везде, с нуля!) соединяет вершины 1 2 0, первый - 3 4 2, второй - 5 3 2. Нулевой и первый окрашены в текстуру под номером 0, а второй - в текстуру с номером 1!
Но при подсчете от нуля до второго получается именно ТРИ треугольника, а не два. Это число и записывает в начало блока!
Такой тип оформления, как разделение на строки НЕ ОБЯЗАТЕЛЕН, это лишь для удобства восприятия текста в сполбик и раздения по группам. Главное, что-бы числа были отделены пробелом друг от друга и не было других посторонних символов, как точки, буквы и т.д.
И САМОЕ ГЛАВНОЕ:
Сгрупируйте все треугольники по номерам текстур, т.к. при их совпадении не происходит переключения загруженных ресурсов (текстур) и fps сильно возврастает. Т.е вот так писать нежелательно:
Quote
5
1 2 0 0
3 4 2 1
5 3 2 2
9 4 2 0
7 5 1 0
Ведь сначала используется текстура с 0 номером, потом 1, затем 2, и снова две текстуры с нулевым номером. Лучше все отсортировать:
Quote
5
1 2 0 0
9 4 2 0
7 5 1 0
3 4 2 1
5 3 2 2
А теперь про рисование четырехугольниками:
Эта фигура состоит из 2 треугольников, имеющих 2 общие вершины (одинаковые номера вершин), и форма записи такова:
A B C T C B D T - тут две общие точки B и С, раздельные A и В, и номер текстуры T (Он может быть разный у данных двух треугольников)
Можно писать и так:
A B C T
C B D T
Точки идут в порядке A, B, C, D и по ЧАСОВОЙ стрелке:
Разумеется, четырехугольник увеличивает число треугольников при добавление на ДВА.
Пример:
Quote
6
0 4 1 0 1 4 5 0
1 5 2 0 2 5 6 0
2 6 3 0 3 6 7 0
3 четырехугольника, т.е. 6 треугольников (кэп)
Конец.
Нет, теперь пункт #3:
Начинается все с кол-ва вершин. Правила теже, что и для кол-ва треугольников в #2.
Далее, свойства каждой вершины:
X Y Z U V - В начале, 3 координаты в пространстве. А потом, числа U и V - это координаты на текстуре! Т.е. положение картинки, натягиваемой на текстуру, в данной точке. Все числа записаны через ТОЧКУ!
Пример:
Quote
3
6.0 1.5 6.0 3.0 3.0
4.0 0.2 6.0 2.0 3.0
2.0 0.3 6.0 1.0 3.0
Три точки:
Нулевая: X = 6.0 Y = 1.5 Z = 6.0 U = 3.0 V = 3.0
и т.д.
X, Y, Z - как у камеры, вправо-вверх-вперед. А вот U - координата по ширине текстуры, а V - по высоте.
Фактически, U и V лежат в промежутке от 0.0 до 1.0 (от левого края картинки, до правого по U. И от нижнего края, до верхнего, по V) Вычитается целый период и остается только дробная часть, т.е. 1.5 -> 0.5, а в -3.2 -> -3.2 + 4.0 -> 0.8 Что влияет на положние пикселей... Проще просто поэкспериментировать с различными числами, что-бы понять суть чисел U и V.
Пока оставлю так, потом допишу этот пункт #3...
А теперь разгрузка мозгов и пункт #4:
Вначале, число текстур, потом их имена. Вначале имени, пишем процент %, в конце имени тоже пишем процент %. Между концом названия и началом следующего, т.е. между %% любая фигня, кроме %, можно комментарии:
Quote
4
%Metall.jpg%
%Glass.jpg%
%Plane.jpg%
%Wood.jpg%
4 текстуры, с четырьмя названиями. Название любое, CalsLock не влияет, обязательно расширение, т.е. %Metall.jpg% и %meTALL.jpg% - одинаковые текстуры.
Пока все) Пример всего, в котором уже не должно оставаться непонятного:
Quote
0.5 0.5 -1.0
2
0 1 3 0
3 1 2 0
4
0.0 0.0 1.0 0.0 0.0
0.0 1.0 1.0 0.0 1.0
1.0 1.0 1.0 1.0 1.0
1.0 0.0 1.0 1.0 0.0
1
%Texture.jpg%
Всем удачи в строительстве карт=)