Порталы, как в Portal.
| |
Undead | Дата: Понедельник, 28 Января 2013, 01:36 | Сообщение # 1 |
NeoAxis User
Сейчас нет на сайте
| Кто-нибудь знает как они реализованы, или где про это почитать(можно на английском). Меня интерисует только принципы работы, хочу реализовать подобное.
Вcем зла.
Сообщение отредактировал Undead - Понедельник, 28 Января 2013, 13:34 |
|
| |
TimKruz | Дата: Понедельник, 28 Января 2013, 18:37 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| Как конкретно в Portal - не знаю, но самый простой вариант - делать как зеркала. Т.е. делается дырка в стене, а за ней - вторая сцена, копия первой, только с определённой точки зрения и под определённым углом (если второй портал открыт). Ну и при переходе объекта из портала в портал просто одна копия выходит в основную сцену, а вторая уходит в дополнительную. Или можно рисовать одну сцену с разных позиций, сохранять "скриншот" в памяти и использовать как текстуру портала, а для перехода создавать копию объекта в другом месте. Т.е. первая прорисовка в заднем буфере формирует изображение "из портала", картинка сохраняется как текстура, буфер перерисовывается картинкой "из глаз игрока" и выводится на экран. Только ещё угол зрения учитывать придётся...
|
|
| |
Undead | Дата: Понедельник, 28 Января 2013, 19:06 | Сообщение # 3 |
NeoAxis User
Сейчас нет на сайте
| TimKruz, Зеркала у меня иначе. Просто рендер в текстуру с дополнительной камеры. За идею про 2 сцены спасибо. Можно и так попробовать. Вот только с дырками(самими порталами) в стенах и потолке проблема. Комната состоит из тайлов стен, потолка, пола. И каждый тайл - статичная физ. модель. Придётся либо обновлять модель во время игры, либо делать из примитивов и просто убирать колизии с примитивами. Буду думать.
Вcем зла.
Сообщение отредактировал Undead - Понедельник, 28 Января 2013, 19:38 |
|
| |
daun | Дата: Понедельник, 28 Января 2013, 20:34 | Сообщение # 4 |
постоянный участник
Сейчас нет на сайте
| Скорей всего сцена отрисовывается два раза, вторая смещается (translate, rotate), чтобы дыры совпали, и как-то гг телепортируют. Наверно сцену клонируют прямо с гг.
Сообщение отредактировал daun - Понедельник, 28 Января 2013, 20:39 |
|
| |
Undead | Дата: Понедельник, 28 Января 2013, 21:03 | Сообщение # 5 |
NeoAxis User
Сейчас нет на сайте
| daun, Нет, тут сложнее, чем телепортация. Если портал в плоской поверхности и объект в нём только на половину. Надо что-то с остальной частью делать. Просто модель обрезать не проблема. Да только тут ещё и физическая модель есть, её так просто не обрезать.
Вcем зла.
|
|
| |
ShadowZi | Дата: Понедельник, 28 Января 2013, 21:58 | Сообщение # 6 |
постоянный участник
Сейчас нет на сайте
| Пройди первый портал с коментариями Там вроде в одном из первых коментариев для уровня. Было сказано, что для них это был большим гемором, чтобы обеспечить возможность прохождения, частичного (внести часть куба или часть героя в портал). Проблема была как с физикой(портал может быть один на стене второй на полу и потолку) так и с поведением. В итоге они отказались от совмещённой прорисовки и физики и разделили на разные системы. С камерами вроде поступили банально, а именно в каждый портал засунули по камере и рисуют это в текстуру, правда чтобы обеспечить вид вложенных порталов, там приходится несколько раз один основной портал проходить чтобы получить коридорчик, но им как-то удалось оптимизировать. С физикой было интереснее
|
|
| |
Undead | Дата: Вторник, 29 Января 2013, 15:31 | Сообщение # 7 |
NeoAxis User
Сейчас нет на сайте
| ShadowZi, Я помню про это. Они всех секретов то не рассказывают.
Вcем зла.
|
|
| |
noname | Дата: Среда, 13 Марта 2013, 20:10 | Сообщение # 8 |
заслуженный участник
Сейчас нет на сайте
| вряд ли эта инфа чем-то поможет, но ещё интересно порталы сделаны в игре Prey:
Prey была издана раньше чем Portal, и в ней портал просто не заметен: там есть момент, где ты просто идя по коридору, проходишь через портал в другую часть коридора, и это совершенно не заметно. обычно же там порталом является, например, одна из сторон ящика или дверной проём, стоящий посреди комнаты- смотришь в ящик(или такой проём) и видишь другую комнату и можешь в неё войти. при этом, некоторые порталы можно и отключать.
все правила форумной игры Дуэль Программистов
|
|
| |
Техник | Дата: Среда, 13 Марта 2013, 20:50 | Сообщение # 9 |
Глава X-ray Games
Сейчас нет на сайте
| Как я вижу реализацию порталов: трассируем 1 луч и получаем координаты центра первого портала, трассируем второй для задания координат второго. Затем при пересечении сферы с ограничивающим объемом одного из порталов перемещаем на координаты второго. Рисование зеркальной поверхности - это работа со стенсил буфером,если писать на чистом API или работа с ним же,но косвенно через методы некоторого класса или механизма,отвечающего за данную работу. Про реализацию зеркал на любом API можно найти в интернетах.
|
|
| |
vinurd | Дата: Четверг, 14 Марта 2013, 03:09 | Сообщение # 10 |
постоянный участник
Сейчас нет на сайте
| выстрел в стену ставит камеру. выстрел в другую тоже ,обе камеры перекрестно передают изображение на текстуру порталов . дальше идет большой код. если модель игрока прикоснусь к тексту первого портала то идет перенос камеры зрения в координаты портала выхода создание модели тела, того что в руках с уничтожением модели в портала входа и по второму движению по отношению к текстурам портала если движение при выходе меняется на обратный вход то процесс переворачивается. портал выхода становиться входом и все повторяем. создание модели предмета воспроизводится по углу прикосновения модели. по сути это фокус, быстрота двжка и умелая постановка предметов не дает разглядеть подмены.
|
|
| |
Undead | Дата: Четверг, 14 Марта 2013, 04:42 | Сообщение # 11 |
NeoAxis User
Сейчас нет на сайте
| Цитата (noname) Prey была издана раньше чем Portal, и в ней портал просто не заметен: там есть момент, где ты просто идя по коридору, проходишь через портал в другую часть коридора, и это совершенно не заметно. обычно же там порталом является, например, одна из сторон ящика или дверной проём, стоящий посреди комнаты- смотришь в ящик(или такой проём) и видишь другую комнату и можешь в неё войти. при этом, некоторые порталы можно и отключать. Кэп.
Цитата (vinurd) выстрел в стену ставит камеру. выстрел в другую тоже ,обе камеры перекрестно передают изображение на текстуру порталов . дальше идет большой код. если модель игрока прикоснусь к тексту первого портала то идет перенос камеры зрения в координаты портала выхода создание модели тела, того что в руках с уничтожением модели в портала входа и по второму движению по отношению к текстурам портала если движение при выходе меняется на обратный вход то процесс переворачивается. портал выхода становиться входом и все повторяем. создание модели предмета воспроизводится по углу прикосновения модели. по сути это фокус, быстрота двжка и умелая постановка предметов не дает разглядеть подмены. Модель != физическое тело.
Цитата (Техник) Как я вижу реализацию порталов: трассируем 1 луч и получаем координаты центра первого портала, трассируем второй для задания координат второго. Затем при пересечении сферы с ограничивающим объемом одного из порталов перемещаем на координаты второго. Рисование зеркальной поверхности - это работа со стенсил буфером,если писать на чистом API или работа с ним же,но косвенно через методы некоторого класса или механизма,отвечающего за данную работу. Про реализацию зеркал на любом API можно найти в интернетах. Цитата (Undead) Если портал в плоской поверхности и объект в нём только на половину. Надо что-то с остальной частью делать. Просто модель обрезать не проблема. Да только тут ещё и физическая модель есть, её так просто не обрезать.
Вcем зла.
|
|
| |
TimKruz | Дата: Четверг, 14 Марта 2013, 12:38 | Сообщение # 12 |
старожил
Сейчас нет на сайте
| Цитата (Undead) Если портал в плоской поверхности и объект в нём только на половину. Надо что-то с остальной частью делать. Просто модель обрезать не проблема. Да только тут ещё и физическая модель есть, её так просто не обрезать. Ещё зависит от типа портала. По разным теориям, портал может либо пропускать тело напрямую, т.е. можно сунуть руку и увидеть её, торчащей из другого портала, либо производить переправку тела только после полного поглощения тела порталом. Если возникают сильные сложности с физикой - сделай второй тип портала, в который нужно целиком запрыгивать (или он сам засасывает - ещё и красивый спецэффект можно прикрутить).
Ну можно ещё делать примерно так: совсем отключать коллизию с теми стенами, на которых порталы, в момент вхождения в портал; и ещё у тебя должно быть как бы три сцены (основная, для первого и второго порталов) и две модели игрока, но столкновения обрабатывает только первая физическая модель, которая переходит из первой во вторую сцены; после окончательного перехода модель №1 уничтожается, а физическая модель переносится на модель №2.
|
|
| |
OpenGOO | Дата: Четверг, 14 Марта 2013, 22:59 | Сообщение # 13 |
почти ветеран
Сейчас нет на сайте
| Пример портала на Blitz3D почти как в Portal
Games Demystified: Portal
Мои проекты: - Свободный и открытый клон World Of Goo - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)
[GameMaker: Studio v1.4.9999]
|
|
| |
|