
Комментарии 29
Ray-casting (далее — бросание)
А давайте без этой отсебятины. «Бросание»… Что за чушь!
Ray-casting — он и в Африке ray-casting
Doom (iD Software)
Где именно в Domm применяется это самое ваше «бросание»?
// Карта стен (0 - пусто, 1 - стена)
int worldMap[10][10] = {
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,2,2,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};Скрытый текст

И к чему это? В DooM этого нет нигде.
визуально похоже, возможно вы правы, дум я не смотрел вообщем
в инете есть парочка туториалов-обзоров принципиально рейкаст построения пространства
вот я скачал пример тоже прыгать могу, не знаю вообщем
там как не смотри чтоб домик нарисовать с крышей это надо постараться тоесть понять, поэтому можно уже даже и на арену посматривать
Это уровень Wolf-3D, но никак не DooM. DooM использует BSP-деревья и сектора разной высоты.
извините да, вообщем я ничего не докажу тут глубокая теория построения пространства и зависит от того как в самом пространстве мы работаем, мы можем остаться на уровне Вольфа, можем расширить побольше, далее, можем хоть в вокселях так же рисоваться(рейкаст или трейс или растр), тут основной принцип построение пространства, так сам принцип это есть какойто контейнер у дума это был WAD файл, а что там текстура или числа уже не имеет значения нас интересует метод построения пространства покачто(ну сходу сразу видно что пространство ограничено вроде, и для оптимизации более большого пространства придётся думать как компановать все эти ситуации вообщем), а будет ли расширение дальше это уже опыт
а тут чтоб летать прикол не тривиальный, даже не интересно, в смысле в самом методе базовом не интересно, в примере конечно будет интересно глянуть, тут даже если в кватернионы уходить массив 2д исходно, можно конечно уйти в 3д массив ради Z вобщем это граница с вокселями, там 3д массив тоже
сам рейкаст это чистый 2д в базе, захотел поиграть в арену называется приходится делать игрушку хотяб подобие ), сделаю тогда вольф )
тут нюансы в проходе, рейтрейс это проход по ортогонали h w и заполнение кубиками к примеру, мы оперируем линиями, линии можно наклонить, а слоистость можно добавить поидее)(тоесть добавить на место крыши еще 1 уровень)), тоесть главное понять из чего формируется 3д пространство )
аабб еще посмотреть можно наверно )
можно и зеро толеранс впринципе сделать и поидее без аабб и без бсп )
штампуем лабиринты и связываем и вуаля вольф база игра поидее )
не знаю, я добавил текстуры на стены и понял почему всё так в такого рода движках, кстати потребление маленькое и тут не как в примере, тут все на черестрочке и с таймом вообще класс CPU не разу не завёлся, как и у дума поидее
0.26% CPU FreeBSD 14.2
Никак не пойму - это шизофазия? Или у вас русский не родной? Просто набор слов.
просто BSP не панацея, можно еффективно рисовать уровни и считать коллизии рейкастом для чего он и предназначен, БСП вы делаете ради того чтобы при отрисовке пола знать крайние точки по низу, тоесть рисовать сканлайнами, спасибо за ваш коментарий
тоесть
| |
-------для таких ситуаций, вот чтобы сделать по полу сканлайн от точки А ребро стены внизу, к точке Б ребро стены внизу вы строите БСП и для этого тоже
потомучто сама стена не нагрузная, да и уровни в думе слоистые кстати, что тоже позволяет делать БСП
и это всё равно это всё в рамках рейкаста, вот такие дела
а как строится 3д пространство в думе?
там есть вырезы-колодцы например, лестницы, уровни над уровнями
Чересстрочная_развёртка хороший термин для двойной беферизации наверно
raycast всё равно придётся пускать хоть в bsp хоть src
Скрытый текст

различие только в том что в бсп мы имеем дерево линий и соотв позиция игрока, что приводит к тем же лучам
выше пример src-просто raycast
подхода без бсп, и я всё еще так же могу создать редактор и нарисовать там уровень или открытий мир и ограничивать уже при бросании лучей
с бсп что проще-то? на сетку придётся разбивать где там выйгрыши? спорно и на любителя, так что оба метода хороши
в основе обоих случаев арифметика интервалов как не крути Interval_arithmetic и рейкаст
а еще вы не учли нюансы бсп это когда разделен уровень и есть повороты и местность открыта и угол 90 градусов

хотя поидее они тут отсекаются, тогда придётся при бсп проходить по +2 сегмента, чтобы отсечь наверно пространство, вообщем по бсп лично для меня вопрос открытый хоть я и понимаю что пускать луч надо от позиции игрока в найденое пространство линий вокруг(или в плоскость проекции перед игроком), но всё же мне кажется в бсп нюансов побольше. Вообщем можно и на простом рейкасте игру сделать
raycast всё равно придётся пускать хоть в bsp хоть src
Да хватит вам уже фанатазировать. Я 23 года назад сделал движок дума по его описанию и игру на его базе. Удачи вам с поиском там трассировки лучей. :)

я не фантазирую просто посмотрел рейкаст и попробовал с опытом какой есть и пришел к выводу, что при бсп, что без бсп бросок лучей остаётся(метод рейкаст отрисовки)
так вот интересно тогда мы получили дерево отрезков и есть позиция игрока, вы же не будете в ветке про рейкаст говорить всем что мол нет мы на самом деле треугольники рисуем?) по большой неудобной формуле например, метод рейкаст значительно проще проекции 3д чем использовать например здоровенные преобразования, в самом названии метода "рейкаст" уже предпологается что отрисовка не преобразованиями(и отсюда следует какое бы пространство не было в условиях граффики рейкаст это не влияет, в одном случае это массив плоскостей единички и нули и двойки, в другом случае массив линий и позиция игрока и кидается рейкаст всё так же по тем же принципам)
понял ладно, ну это моё имхо я посмотрел, бсп попробовал - пока пришел к выводу такому
Real-Time-Collision-Detection-Interactive-Technology кароче еще хотел сказать что и в этой книге есть база по бсп и коллизиям и другим моментам
что при бсп, что без бсп бросок лучей остаётся(метод рейкаст отрисовки)
Мне казалось, я достаточно понятно объяснил, как делается отрисовка обычной закраской пикселей между началом и концом стены на экране?
так рейкастом рисуется как не крути, вы же не будете спорить с ареной tes Arena там тоже рейкаст, а бсп или нет это уже нюансы, кстати если новичек не будет понимать принципов рейкаста, даже изучив бсп будут проблемы, соотв тут придётся погружаться в рейкаст и применять его
что и показывают и эти источники
raycasting3.html
raycasting4.html
после обновленных техник между рейкастом без бсп и с бсп граница стирается практически
как бы это арифметика интервалов потомучто рейкаст это пространство интервалов
Автор всё верно написал.
Я в 1995-м купил как-то книгу, где было подробно расписан этот механизм и я его повторил потом на Pascal (сейчас стыдно про это говорить, но в то время это было нормой)
P.S. Книга: Секреты программирования игр
Автор: Ла Мот А., Ратклифф Д., Семинаторе М.
Издательство: Питер
Год: 1995
ISBN: 5-88782-037-3
В первой версии Doom как раз и был реализован Ray-casting.
В какой «первой версии»? В той, где Кармак экспериментировал с движками и которая в продажу не пошла? Ну так там много чего могло быть. А толку-то? В том Doom, который вышел, никакого «бросания» не было.
Может имеется ввиду в Doom Alpha версии
а как в Doom тогда образуются 3д координаты? причем тут же в вики пишут была тройная буферизация и в вики написано было псевдо 3д
в Арене я видел может это артефакт передачи потокового видео тоесть в видосе видел отсечение перед игроком, куда смотрим то и простраивается как шланг прокладывается
тоесть окей признали BSP и в вики указано тоже, так же в вики написан примерный проход, и там говорится о конусе, а конус это извините точка взгляда, куда смотрим туда и строит-делит, если берем тематику никаких лучей, ну а год извините 94 мсдос все дела, там должен был пускаться луч
Двоичное_разбиение_пространства
тоесть он строит весь мир лучом, а потом делит тогда логично
а при игре делением узнаёт столкновения еще, вобщем интересно конечно )
как без рейкастинга в условиях мсдоса получить 3д тогда интересно
Если бы не такие ограничения, то технология бросания не была бы возможна.Разумеется работал бы, только требовал бы больше ресурсов.
Собственно все эти описания ray-cast движков (кстати, в те времена в русскоязыкной литературе термин переводили как «отсечение лучей», намекая что в отличии от обратной трассировки процесс останавливается на первом же пересечении) умалчивают о главной фишке, которая позволяет им работать так быстро, что первые игры работали ещё на двойках (пусть и не в полный экран). При полноценном отсечении или трассировке вам надо пустить по лучу из точки «глаз» наблюдателя через каждый пиксель экрана, чтобы определить в какой цвет его красить. Для разрешения 320x200 это 64000 лучей на каждый кадр. Однако, учитывая, что стены только вертикальные и только от пола до потолка — мы можем ограничиться лишь одной линией отсечения вдоль виртуального горизонта, что для vga режима даст всего 320 лучей на кадр. Вот оно то, драматическое улучшение алгоритма.
Раз стена занимает всегда всю высоту, то найдя точку пересечения луча со стеной мы можем сразу отрисовать всю колонку текстуры стены от пола до потолка. Собственно, в Wolf3D текстуры даже хранились в таком перевёрнутом виде, поколоночно, а не построчно, как обычно.
Второй трюк в том, что стены имеют квадратное основание, т.е. все её стороны равны, а их расположение строго дискретно. Грубо говоря вся карта представляет собой двумерный массив, в каждой из ячеек которой стена может или быть или не быть. Это превращает задачу поиска пересечения луча со стеной в тривиальную.
Ребята. Перевод статьи 1996 года не очень своевременный. Как раз два года назад начали появляться аппаратные средства для рейтрейсинга (пересечение/построение BVH и пересечение луча с треугольником). Теперь это не так уж и медленно.
Обучение технологии ray-casting, часть 1