Войти
ПрограммированиеФорумГрафика

Как работает графика в Wolf3D/Doom?

Страницы: 1 2 37 8 Следующая »
#0
19:53, 5 авг. 2019

Может кто-то скинуть хороших статей о том, как устроен рендеринг в этих играх? Каким образом движок отрисовывает трехмерную сцену и в каком формате она хранится?


#1
20:13, 5 авг. 2019

Глянь этот плейлист на ютубе, возможно это то что тебе надо.

#2
(Правка: 20:20) 20:18, 5 авг. 2019

Рэйкастинг

Нашел:
https://gamedev.ru/code/forum/?id=177367&m=3409153#m6

Wolf3D - рэйкастинг по регулярной сетке алгоритмом Брезенхэма
Doom итд - рэйкастинг по BSP дереву

#3
22:22, 5 авг. 2019

когда то давно, лет 20 назад у меня была такая КНИГА

#4
(Правка: 22:46) 22:44, 5 авг. 2019

Вот еще что могу предложить по этой теме.

1. Видос "Code-It-Yourself! First Person Shoote" тык
2. Видос "Upgraded! First Person Shooter at Command Prompt" тык
3. Статейка на русском (вроде тоже самое что и в первом видосе) тык

Ну и если что, то всегда можно глянуть на github сорсы Wolf3D, благо Кармак их открыл (но этот вариант для самых отчаянных).

Правка: исправил нумирацию.

#5
5:45, 6 авг. 2019

The Game Engine Black Book: DOOM

#6
(Правка: 10:58) 10:40, 6 авг. 2019

Robotex
Уже написали про рэйкастинг.
Добавлю, что в Doom 1-2 карта отдельно для пола/потолка - низ/верх, состоит из секторов (замкнутых областей с равной высотой), которые при компиляции делятся на субсектора - выпуклые области и для них строится BSP-дерево. Стена - всегда граница двух секторов.
Т.е. 2.5D - нет этажей одного над другим, окно в стене - там просто отодвинули пол и потолок итд
Пуская луч от игрока, рисуем вдоль колонки экрана встреченные субсектора и стены, сдвигая нижнюю и верхнюю границы (метод горизонта), пока они не встретятся.
Подобный метод для хейтмап применил Вий в своих "Лабиринтах Ужаса".

#7
10:47, 6 авг. 2019

Но разве трассировка луча это не дофига затратная операция? А они это на древнем железе делали...

#8
10:48, 6 авг. 2019

zombihello
> Глянь этот плейлист на ютубе, возможно это то что тебе надо.
Wow! Походу

#9
11:00, 6 авг. 2019

Aslan
> Пуская луч от игрока, рисуем вдоль колонки экрана встреченные субсектора и
> стены, сдвигая нижнюю и верхнюю границы (метод горизонта), пока они не
> встретятся.

да ну ... может только wolf3d, в DOOM точно не было лучей :)

#10
11:02, 6 авг. 2019

Robotex
> Но разве трассировка луча это не дофига затратная операция? А они это на древнем железе делали...
Так ведь всего 320 лучей, по числу колонок экрана, с каждым лучом рисуется вся колонка, а не один пиксел, т.к. луч по 2D карте дает пересечение вертикальной полуплоскости с уровнем

#11
11:04, 6 авг. 2019

innuendo
> да ну ... может только wolf3d, в DOOM точно не было лучей :)
В Wolf3d - точно, а DOOM - хз, но его возможно так сделать

#12
12:58, 6 авг. 2019

Aslan
> а DOOM - хз, но его возможно так сделать
В Думе нет, рисуются стены от ближней к дальней.

#13
13:02, 6 авг. 2019

Robotex
На видео взгляд не горизонтальный, вероятно не рэйкастинг

#14
13:18, 6 авг. 2019

Aslan
> На видео взгляд не горизонтальный, вероятно не рэйкастинг
На видео очевидно модный опенгл-порт, в котором геометрию старого уровня можно рисовать за один вызов glDraw, поэтому видео абсолютно неинформативно в контексте данной темы и его зря сюда кинули.

Страницы: 1 2 37 8 Следующая »
ПрограммированиеФорумГрафика