Sidebar

Загрузка .map

Загрузка .map

Вопрос. Какого вида алгоритм нужен для того, чтобы после загрузки .map файла построить браши на основе данных в нём?
Проблема такая, что в этом формате каждая сторона браша описывается тремя точками. Как вывести из них нормаль, я ещё примерно представляю. А вот как высчитать количество точек у каждой поверхности и их позиции, сообразить не могу. Хотя по идее это что-то простое, иначе ид и вальв не стали бы пользоваться такой извращённой записью.
Рылся в исходник бета-хаммера, там всё как-то мутно и раскиданно. Реквестирую указание на конкретные функции или пример кода.
И да, загрузчик пишу на яве, код на C как образец подойдёт.
 

FiEctro

Супер Модератор
Команда форуму
Супер Модератор
28.07.06
17 167
33
  • Золотая медаль 213
  • Neh
"три точки" это planes нужны для физики и куллинга.
Для отрисовки юзаются обычные вертексы. (ц) ДМ
 
Вот .map файл с одним простым брашем. Подчёркнутое - те самые три точки, которые определяют поверхность. А где тут вертексы?

Код:
{
"classname" "worldspawn"
"mapversion" "220"
"wad" "\games\valve\valve\halflife.wad"
{
[u]( -512 512 64 ) ( 512 512 64 ) ( 512 -512 64 )[/u] AAATRIGGER [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 
( -512 -512 0 ) ( 512 -512 0 ) ( 512 512 0 ) AAATRIGGER [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1 
( -512 512 64 ) ( -512 -512 64 ) ( -512 -512 0 ) AAATRIGGER [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 
( 512 512 0 ) ( 512 -512 0 ) ( 512 -512 64 ) AAATRIGGER [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1 
( 512 512 64 ) ( -512 512 64 ) ( -512 512 0 ) AAATRIGGER [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 
( 512 -512 0 ) ( -512 -512 0 ) ( -512 -512 64 ) AAATRIGGER [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 
}
}
 
VIP
12.08.04
18 877
462
83
  • Бронзовая медаль 103
  • Деревянный домик Скааржа
  • Серебряная медаль 213
  • Золотая медаль 136
  • Бронзовая медаль 141
  • Серебряная медаль 125
  • Золотая медаль 221
  • Золотая медаль 213
  • Золотая медаль 232
  • Серебряная медаль 132
100% тремя точками задаётся плоскость.
Если сделать браш и убрать все строчки кроме одной, то получится в хамере бесконечная плоскость-браш через эти 3 точки.

Post automatically merged:

Прописал ещё плоскость под углом и в хамере получился угол в месте пересечения плоскостей.
 
Останнє редагування:

FiEctro

Супер Модератор
Команда форуму
Супер Модератор
28.07.06
17 167
33
  • Золотая медаль 213
  • Neh
2 Лорд Канистра:
Ковыряй волшебную функцию MakeBrushPlanes.
P.S. http://en.wikipedia.org/wiki/Plane_(mathematics)
 
Останнє редагування:
VIP
12.08.04
18 877
462
83
  • Бронзовая медаль 103
  • Деревянный домик Скааржа
  • Серебряная медаль 213
  • Золотая медаль 136
  • Бронзовая медаль 141
  • Серебряная медаль 125
  • Золотая медаль 221
  • Золотая медаль 213
  • Золотая медаль 232
  • Серебряная медаль 132
Что ещё интереснее, если в какой браш впихнуть эту плоскость с условием что плоскость пересекает браш, то этот браш просто отрежется как ножом.
Причём пофигу на координаты точек этой плоскости, правда в хаммере фиксить приходится и он выправляет координаты на более правильные без внешних изменений браша.
 

FiEctro

Супер Модератор
Команда форуму
Супер Модератор
28.07.06
17 167
33
  • Золотая медаль 213
  • Neh
Есть функция PlaneFromPoints, она из трех точек создает планес, из тех самых трех точек. Планес - это плоскость. Любой выпуклый браш можно описать как совокупность плоскостей, а точки пересечения этих плоскостей - как границы браша. Планесы хранить более универсально, нежели вертексы.
 
Команда форуму
VIP
28.03.10
15 566
315
83
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
FiEctro, ты бы хоть как-то отделял свои слова от моих, если цитируешь.
 

Game Server

Доноры Красавчики

Користувачі онлайн