Пятница, 29 Марта 2024, 03:48

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Форум игроделов » Программирование » C/C++ » Оптимизация рейкастинга
Оптимизация рейкастинга
OpenGOOДата: Четверг, 26 Декабря 2013, 13:29 | Сообщение # 21
почти ветеран
Сейчас нет на сайте
Код
int texY = ((d * texHeight) / lineHeight) >>8;


После деления (d * texHeight) / lineHeight) происходит потеря дробной части.


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]


Сообщение отредактировал OpenGOO - Четверг, 26 Декабря 2013, 14:05
AlkoshaДата: Четверг, 26 Декабря 2013, 15:31 | Сообщение # 22
участник
Сейчас нет на сайте
Как бы полностью от всех дробей и умножений избавиться?
Там, где числа кратные 2 в определённой степени , то понятно... А вот в таких ситуациях скроллом никак не получится ?

Добавлено (26.12.2013, 15:31)
---------------------------------------------
Очень много времени занимает чтение\запись ОЗУ... Нужно данные как-то задержать в кэше.

Сообщение отредактировал Alkosha - Четверг, 26 Декабря 2013, 15:19
OpenGOOДата: Четверг, 26 Декабря 2013, 19:59 | Сообщение # 23
почти ветеран
Сейчас нет на сайте
Прежде чем делать оптимизацию, ты сперва профилирование сделай, чтобы точно знать что надо оптимизировать.

Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
AlkoshaДата: Пятница, 27 Декабря 2013, 12:31 | Сообщение # 24
участник
Сейчас нет на сайте
Ну тут очевидно, что самые затратные участки там, где происходит выборка пикселей из текстур (пола\потолка\спрайтов). Со сплошным закрашиванием этот рейкастинг достаточно шустрый.

Добавлено (27.12.2013, 12:31)
---------------------------------------------
Ага. У операции сдвига приоритет меньше , чем у сложения и вычитания. Вот от чего была "текстурная шляпа". Нужно было просто в скобки заключить.

Код
  int d = (y <<8) - d2 + d1;
MrNeshДата: Вторник, 31 Декабря 2013, 14:26 | Сообщение # 25
Воин добра и света
Сейчас нет на сайте
Убери под и потолок...просто разделили экран на две части по горизонтали и рисуй поверх...

AlkoshaДата: Четверг, 02 Января 2014, 23:35 | Сообщение # 26
участник
Сейчас нет на сайте
Дело оказывается не в рейкастинге.
Сама SDL медленно выводит пиксели.
Нужно непосредственно записывать в видео-озу vga-контроллера. Похоже придётся прибегнуть к асму, либо искать альтернативу SDL'ке для попиксельного вывода.
OpenGOOДата: Пятница, 03 Января 2014, 00:54 | Сообщение # 27
почти ветеран
Сейчас нет на сайте
Ты что-то не то делаешь

Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
AlkoshaДата: Пятница, 03 Января 2014, 00:59 | Сообщение # 28
участник
Сейчас нет на сайте
Цитата OpenGOO ()
Ты что-то не то делаешь


Даже элементарное заполнение пикселями на 166-ти мегагерцовом пентиуме MMX выдаёт 5 кадров в секунду на разрешении 800*600 (32 бита)
(процедура вывода пикселя для заполнения взята отсюда http://plg.lrn.ru/doc/sdl/lesson1.html)

Что на SW-сюрфейсе , что на HW-сюрфейсе мэдлэнно.


Сообщение отредактировал Alkosha - Пятница, 03 Января 2014, 01:00
OpenGOOДата: Пятница, 03 Января 2014, 21:03 | Сообщение # 29
почти ветеран
Сейчас нет на сайте
У тебя просто проц уже не справляется, уменьши разрешение хотя бы. У тебя какая хоть видюха, а то даже Descent 3 в 1999г. уже использовал аппаратное ускорение.

Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
AlkoshaДата: Суббота, 04 Января 2014, 11:43 | Сообщение # 30
участник
Сейчас нет на сайте
Цитата OpenGOO ()
У тебя просто проц уже не справляется, уменьши разрешение хотя бы. У тебя какая хоть видюха, а то даже Descent 3 в 1999г. уже использовал аппаратное ускорение.


Всё проц справляется.

На софтверном рендеринге Descent 1 и Descent 2 на разрешениях 640*480 летают. А там, как всем известно, даже полигональное 3д.
Рейкастинги тем более он шпарит только так. Порт дюка eduke32 на разрешении 800*600 тоже работает идеально (чуток проседает правда, когда много wav-семплов воспроизводит, но если понизить воспроизведение сэмплов до 22 килогерц, то всё ровненько идёт)
Порт дума Doom95 тоже идеально работает на разрешении 640*480. И даже сравнить тот же дум, где разная высота стен, векторное построение карт, куча спрайтов, ИИ, воспроизведение звуковых сэмплов, и тот пример, который я разбираю.

Добавлено (04.01.2014, 11:43)
---------------------------------------------
Даже полигональное 3дэ для того проца раз плюнуть, если не используется коррекция перспективы при текстурировании.
NFS 1 (NFS SE), и подобные гоночки, например.


Сообщение отредактировал Alkosha - Суббота, 04 Января 2014, 11:44
OpenGOOДата: Суббота, 04 Января 2014, 13:37 | Сообщение # 31
почти ветеран
Сейчас нет на сайте
Судя по описанию eduke32 использует OpenGL Doom95 использует DirectX.
Descent 1 и Descent 2 они под чистым DOS работают а это как работать в винде с DirectX или OpenGL.

Сколько у тебя фпс на 166 без вывода на экран 30, 60, 120?

Цитата
В 1994 году Microsoft была практически готова выпустить следующую версию Windows — Windows 95. Главным фактором, определяющим, насколько популярна будет новая ОС, являлся набор программ, которые можно будет запускать под её управлением. В Microsoft пришли к выводу, что, пока разработчики видят MS-DOS более подходящей для написания игровых приложений, коммерческий успех новой ОС весьма сомнителен.

MS-DOS позволяла разработчику получить прямой доступ к видеокарте, клавиатуре/мыши/джойстику и прочим частям системы, в то время как Windows 95, с её защищённой моделью памяти, предоставляла более стандартизованный, но в то же время весьма ограниченный и накладный доступ к устройствам. Microsoft нуждалась в новом способе дать разработчику всё, что ему необходимо. Айслер (Eisler), Сэйнт Джон (St. John), и Энгстром (Engstrom) решили эту проблему, назвав само решение DirectX.


DirectX

GDI from the Driver's Perspective


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]


Сообщение отредактировал OpenGOO - Суббота, 04 Января 2014, 14:01
AlkoshaДата: Суббота, 04 Января 2014, 16:08 | Сообщение # 32
участник
Сейчас нет на сайте
Цитата Alkosha ()
Судя по описанию eduke32 использует OpenGL Doom95 использует DirectX.


Там есть опциональный выбор рендеринга. На openGL вообще не прёт, ибо видяха не тянет это API. (видяшка ATI Rage II)
и при выборе софтверного рендеринга в eduke, там именно рейкастинговый графон, а не спрайтово-полигональное 3д, как если бы было на openGL.
А на DX видяха вообще адски медленно рисует. Есть несколько игор с выбором D3D рендерера и софтверного.
На D3D значительно тормознее, тот же MDK, или motorace. Хоть она фильтрует текстуры, производит коррекцию перспективы, тонирование Гуро дизерингом. Но по скорости уступает тому, что рисует непосредственно проц, поэтому всегда выбираю именно software render.

Кстати установленная ОСь win98 SE. Где всё ещё была поддержка ДОС-программ.
Или вы хотите сказать, что DOS эмулируется , и картинку выводит исключительно DX ?


Сообщение отредактировал Alkosha - Суббота, 04 Января 2014, 16:11
OpenGOOДата: Суббота, 04 Января 2014, 22:24 | Сообщение # 33
почти ветеран
Сейчас нет на сайте
ДОС эмитируется когда она запускается в окне. чтобы был чистый ДОС надо выгрузить винду.

Кстати, в движках Duke Nukem 3D и Doom не использовался рейкастинг.

Я вообще не понимаю зачем тебе этот рейкастинг, если есть ZDoom.


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]


Сообщение отредактировал OpenGOO - Суббота, 04 Января 2014, 22:28
AlkoshaДата: Суббота, 04 Января 2014, 22:45 | Сообщение # 34
участник
Сейчас нет на сайте
Цитата OpenGOO ()
ДОС эмитируется когда она запускается в окне. чтобы был чистый ДОС надо выгрузить винду.


Но запускаю-то я в фуллскрине. Тем паче, я даже при выгруженной винде (перезагрузка в режиме MS-DOS) запускал те же самые descent'ы , и квейк , и nfs... Разница лишь в том, что в этом режиме не грузятся дрова на мышу, потому в квейке , например, только клавой можно управлять. А fps примерно такой же.

Цитата OpenGOO ()
Кстати, в движках Duke Nukem 3D и Doom не использовался рейкастинг.

О_о
Эммм... Вы наверное спутали с третьим думом и с дюком нюкемом форэва.

В дюке нюкеме 3д есть возможность вертеть камеру вверх/вниз, и там нет сдвига перспективы по вертикали, то есть нет точки схода по оси Y, ровно так же, как нет её hertic'e , hexen'e, или воксельном, но в то же время рейкастинговом comanche. Или rise of triad, в котором движок основан вообще на wolf3d.
И ещё одна отличительная черта рейкастинговых движков - нет этажа над этажом. уровни двухмерные при виде сверху в любом случае.

Добавлено (04.01.2014, 22:45)
---------------------------------------------
Цитата OpenGOO ()
есть ZDoom.

Промелькала такая мысля. Но будет ли там возможность всё сделать на свой лад? То есть не очередной клон дума, а полностью видоизменить от и до.
ZDoom этож вроде типа готового конструктора (а-ля, гей-мейкеры всякие)


Сообщение отредактировал Alkosha - Суббота, 04 Января 2014, 22:52
OpenGOOДата: Воскресенье, 05 Января 2014, 03:45 | Сообщение # 35
почти ветеран
Сейчас нет на сайте
Цитата Alkosha ()
Эммм... Вы наверное спутали с третьим думом и с дюком нюкемом форэва.


Можешь сам увидеть что это не рейкастинг

Duke Nukem 3D: BUILD ENGINE INTERNALS

Doom engine code review

ZDoom это опен сорс проект, так что всё в твоих руках. В любом случаи, ты такой движок и за пару лет не сделаешь, ведь его пилят уже не один год.


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
pelmenkaДата: Воскресенье, 05 Января 2014, 04:02 | Сообщение # 36
Драгоценный Тунеядец
Сейчас нет на сайте
Эмм... id Tech 1 (движок дума) и Build Engine (движок дюка) это рейкаст, а не 3д. Они его, конечно, круто используют, делая игру очень похожей на 3д, но от этого они 3д движками не становятся.

Сталина в каждый дом!
XakepДата: Вторник, 07 Января 2014, 14:00 | Сообщение # 37
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата pelmenka ()
Они его, конечно, круто используют, делая игру очень похожей на 3д

в смысле похожей на 3д? это и есть 3д, если не исопльзуется OpenGL или DirectX это не значит что игра не 3Д, вся 3д графика, как и эти движки используют для имитации 3д матрицы трансформации, это уже потом начала развиваться графика в 3д в играх.
AlkoshaДата: Среда, 08 Января 2014, 20:08 | Сообщение # 38
участник
Сейчас нет на сайте
Вы сперва определитесь с понятием "3д". Зачастую анаглифное кино тоже называют ТРИ ДЭ.

таки да, первый дум можно отнести к три дэ, имхо. Так как у спрайтов там как минимум три параметра положения в пространстве, как и в дюке нюкеме ТРИ ДЭ.
Но это не полигональное три дэ, а рейкастинг однозначно. Для скептиков есть чит IDCLIP , при прохождении за пределы стен замечательно видно, что рендерится картинка столбцами, как и положено рейкастингу.

Но как бы там ни было, итоговая картинка всё равно проецируется на двухмерную плоскость, то бишь дисплей юзера.
OpenGOOДата: Среда, 08 Января 2014, 22:38 | Сообщение # 39
почти ветеран
Сейчас нет на сайте
Чтобы выводить изображение по столбцам не нужен рейкастинг, надо только иметь двухмерный буфер с пикселями. Загляните в исходники дума и прочтите комментарии, а ещё лучше загляните в сам код.

Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]


Сообщение отредактировал OpenGOO - Четверг, 09 Января 2014, 11:14
Форум игроделов » Программирование » C/C++ » Оптимизация рейкастинга
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг