nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 07:44



Reply to topic  [ 89 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6  Next
Самодельный 3D движок Virtburg 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
  • байт ex - тип куба пока может принимать только 2 значения: 0x00 - можно пройти и 0x10 - нельзя пройти (препятствие);
  • байт hs - сколько разных текстур можно наклеить на столбик (пока не поддержано);
  • байт dd - цвет для верхушки столбика (пока используется лишь при построении карты);
  • байт hh - высота столбика в кубиках (0 - пустая клетка, 1 - один этаж и т.д.);
  • слово id - идентификатор линка если есть (можно в будущем расширить вообще для абстрактных триггеров);
  • слово t0 - задаёт идентификатор текстуры для верхушки столбика (пока используется только для комнат как текстура на потолке);
  • слово t1 - идентификатор текстуры на восточной стороне столбика (если hh>=1) или текстуры на полу (если hh==0);
  • слово t2 - идентификатор текстуры на северной стороне столбика (невидно если hh==0);
  • слово t3 - идентификатор текстуры на западной стороне столбика (невидно если hh==0);
  • слово t4 - идентификатор текстуры на южной стороне столбика (невидно если hh==0).

По аналогии с описанной выше Micro Edition можно поддержать автоматическую анимацию для пола (для кубов без столбиков где hh=0) задействовав hs, которая предполагалась быть использованной только для столбиков высотой 2 и выше (чтобы разные текстуры клеить на одну сторону) - например старший нибл hs задавал бы частоту смены кадров в герцах, а младший нибл - сколько текстур ротейтится - 2, 3 или все 4 (задействовав полный набор t1,t2,t3,t4, причём t0 всё также останется на потолке)...

Для пущей понятности dd можно переименовать в cc (column color?)

Другие возможные типы ex на будущее:
0x0N - площадка на высоте N=0...F (туда можно заходить только с такой же площадки либо с правильной стороны пандуса);
0x10 - также как и раньше обозначает обычную занятую клетку (пройти нельзя ни с какой стороны с любого уровня);
0x1N - пандус с востока и вверх на запад (N=1...F);
0x20 - клетка поднимающая вверх;
0x2N - пандус с севера и вверх на юг (N=1...F);
0x30 - клетка опускающая вниз;
0x3N - пандус с запада и вверх на восток (N=1...F);
0x40 - подбрасывающая клетка (смерть аватара при дальнейшем падении?);
0x4N - пандус с юга и вверх на север (N=1...F);
0x5N - бегущая дорожка с востока на запад (N=0...F);
0x6N - бегущая дорожка с севера на юг (N=0...F);
0x7N - бегущая дорожка с запада на восток (N=0...F);
0x8N - бегущая дорожка с юга на север (N=0...F);
0x90 - электрическая клетка (мгновенная смерть аватара?);
0x91 - вода (аватар уходит под воду, оставляя над водой только голову - можно вылезти и можно плыть);
0x92 - болото (аватар постепенно уходит вниз - вылезти невозможно);
0x93 - кислота (аватар уходит ниже уровня жидкости и начинает постепенно терять здоровье - можно вылезти);
0x94 - лава (аватар уходит вниз и с шипением умирает);
где N - высота уровня ног пользователя в самой высокой части соответствующей клетки.
Пандусы надо будет изображать полигонами в 3D - по ним можно подняться с одного уровня на другой.
Спрыгивать с верхних этажей можно с потерей здоровья (одна единица здоровья за 1 этаж?).

P.S. С другой стороны высота столбика уже задана как hh, соответственно в ex её повторять ненужно - все бегущие дорожки и пандусы могут быть возможны только на верхней поверхности столба из кубиков, соответственно типы ex можно переупорядочить вот так:
0x00 - проход разрешён с любой стороны на любом уровне;
0x01 - площадка на высоте hh;
0x02 - площадка на высоте hh через которую можно пройти только с востока или с запада;
0x03 - площадка на высоте hh через которую можно пройти только с севера или с юга;
0x04 - пандус с востока и вверх на запад (с уровня hh на уровень hh+1);
0x05 - пандус с севера и вверх на юг (с уровня hh на уровень hh+1);
0x06 - пандус с запада и вверх на восток (с уровня hh на уровень hh+1);
0x07 - пандус с юга и вверх на север (с уровня hh на уровень hh+1);
0x08 - бегущая дорожка с востока на запад (на уровне hh);
0x09 - бегущая дорожка с севера на юг (на уровне hh);
0x0A - бегущая дорожка с запада на восток (на уровне hh);
0x0B - бегущая дорожка с юга на север (на уровне hh);
0x0C - клетка поднимающая вверх (до высоты hh);
0x0D - клетка опускающая вниз (с высоты hh);
0x0E - волшебная клетка-ссылка (?);
0x0F - укорачивающая клетка (на расстояние hs);
0x10 - также как и раньше обозначает обычную занятую клетку (пройти нельзя ни с какой стороны с любого уровня);
0x11 - клетка занята статическим невысоким объектом (плоским спрайтом), через который нельзя пройти, но можно перепрыгнуть;
0x12 - клетка занята статическим объектом (плоским спрайтом), который можно забрать;
0x13 - клетка занята статическим уничтожаемым объектом (плоским спрайтом), через который нельзя пройти (но можно расстрелять);
0x14 - клетка занята двигающимся объектом (плоским спрайтом), через который нельзя пройти (но можно расстрелять);
0x20 - прозрачная клетка;
0x21 - зеркальная клетка;
0x80 - вода (аватар уходит под воду, оставляя над водой только голову - можно вылезти и можно плыть);
0x81 - болото (аватар постепенно уходит вниз - вылезти невозможно);
0x82 - кислота (аватар уходит ниже уровня жидкости и начинает постепенно терять здоровье - можно вылезти);
0x83 - лава (аватар уходит вниз и с шипением умирает).

_________________
:dj: https://mastodon.social/@Shaos


02 Sep 2020 22:12
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post Re:
Shaos wrote:
Сделал имитацию робота, пользуясь набором спрайтов:


Если слегка приподняться, то будет видно "секрет" - робот построен из 46 узких плоских спрайтов:

Attachment:
room2.png
room2.png [ 297.09 KiB | Viewed 8599 times ]


Под спойлером текст 3DM-файла, который был использован для генерации видео робота 9 лет назад:

 room2.3dm
Code:
map 11:11
textures 16
t0000 bricks01
t0001 bricks01 +4
t0002 bricks01 -4
t0003 @d8,2 rama02
t0004 rama01
t0005 t
t0006 t2
t0007 rama01
hall 2
start 1 1 45
back baseback.gif
default hh=0 t1=3 t0=4
border ex=10 hh=2 t1=2 t2=0 t3=1 t4=0
objects 100
o0000 5.2200 5.2200 0 0.625 t_9
o0001 5.2200 5.2825 0 0.625 t_8
o0002 5.2200 5.3450 0 0.625 t_7
o0003 5.2200 5.4075 0 0.625 t_6
o0004 5.2200 5.4700 0 0.625 t_5
o0005 5.2200 5.5325 0 0.625 t_4
o0006 5.2200 5.5950 0 0.625 t_3
o0007 5.2200 5.6575 0 0.625 t_2
o0008 5.2200 5.7200 0 0.625 t_1
o0009 5.2200 5.7825 0 0.625 t_0
o000A 5.2825 5.2200 0 0.625 t2_1
o000B 5.2825 5.7825 0 0.625 t2_8
o000C 5.3450 5.2200 0 0.625 t2_2
o000D 5.3450 5.7825 0 0.625 t2_7
o000E 5.4075 5.2200 0 0.625 t2_3
o000F 5.4075 5.7825 0 0.625 t2_6
o0010 5.4700 5.2200 0 0.625 t2_4
o0011 5.4700 5.7825 0 0.625 t2_5
o0012 5.5325 5.2200 0 0.625 t2_5
o0013 5.5325 5.7825 0 0.625 t2_4
o0014 5.5950 5.2200 0 0.625 t2_6
o0015 5.5950 5.7825 0 0.625 t2_3
o0016 5.6575 5.2200 0 0.625 t2_7
o0017 5.6575 5.7825 0 0.625 t2_2
o0018 5.7200 5.2200 0 0.625 t2_8
o0019 5.7200 5.7825 0 0.625 t2_1
o001A 5.7825 5.2200 0 0.625 t_0
o001B 5.7825 5.2825 0 0.625 t_1
o001C 5.7825 5.3450 0 0.625 t_2
o001D 5.7825 5.4075 0 0.625 t_3
o001E 5.7825 5.4700 0 0.625 t_4
o001F 5.7825 5.5325 0 0.625 t_5
o0020 5.7825 5.5950 0 0.625 t_6
o0021 5.7825 5.6575 0 0.625 t_7
o0022 5.7825 5.7200 0 0.625 t_8
o0023 5.7825 5.7825 0 0.625 t_9
o0024 5.5012 5.1887 0.36 0.0625 d
o0025 5.5012 5.8137 0.36 0.0625 d
o0026 5.5012 5.1575 0.36 0.0625 d
o0027 5.5012 5.8450 0.36 0.0625 d
o0028 5.5012 5.1262 0.36 0.0625 d
o0029 5.5012 5.8762 0.36 0.0625 d
o002A 5.5012 5.0950 0.36 0.0625 d
o002B 5.5012 5.9075 0.36 0.0625 d
o002C 5.5012 5.0637 0.36 0.0625 d
o002D 5.5012 5.9387 0.36 0.0625 d
end

_________________
:dj: https://mastodon.social/@Shaos


03 Sep 2020 19:47
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Вот думаю как серверную часть сделать
Раньше было на перле и простой базе данных ключ=значение
Теперь можно тупо на PHP+MySQL переписать (чат и передача глобальных событий)
А можно уйти в облако с расчётом на будущую бесконечную масштабируемость :roll:
Или вообще попробовать сделать децентрализованно - типа вовсе без сервера обойтись :rotate:
(либо сервер будет только подтверждать что те или иные миры авторизованы быть показанными под маркой Virtburg)
P.S. Обсуждение децентрализованных виртуальных миров перенес в другой топик:
http://www.nedopc.org/forum/viewtopic.php?f=81&t=20142

_________________
:dj: https://mastodon.social/@Shaos


15 Sep 2020 23:43
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
20 апреля 2011 года я оказывается думовского imp-а прикрутил чисто напоглядеть :)

Вот их 100 штук:


Attachments:
imps2011.jpg
imps2011.jpg [ 106.96 KiB | Viewed 8323 times ]

_________________
:dj: https://mastodon.social/@Shaos
16 Oct 2020 19:13
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
AlexanderZh wrote:
А это будет по мотивам "соцсетей"? Может получится весьма интересно.

А что значит "по мотивам соцсетей"? Виртбург был 3D онлайн-чатом - там можно было ходить и общаться путём печатания текста (через сервер)

_________________
:dj: https://mastodon.social/@Shaos


17 Oct 2020 18:12
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
20 апреля 2011 года я оказывается думовского imp-а прикрутил чисто напоглядеть :)

А тебе не кажется, что для того размаха, который ты пока лишь планируешь, у тебя графика слабовата?

Я из тех соображений, что ты про покупку гаджетов и "внутреннюю валюту" рассуждаешь...

Сам-то я и в не-онлайн игры редко играю, а в онлайн и вовсе не играю, но слышал от многих в основном
офисных работников про довольно популярную онлайн игру "Бумз!"

Так там графика весьма крутая, хотя и не 3D может быть, но затея в том, что в эту игру подсевшие
на неё вкладывают самые настоящие деньги, чтобы прикупить "ништяков".
Нет, там можно и за очки прикупить, но это долго...

А знаю я эту игру, потому как всякие офисные бездельники еще и видео снимают про свои удачные прохождения,
и выкладывают на Ютуб, а потом пристают - "посмотри ролик, как я там на Бумзах круто!"

А почему я тебе это тут рассказал, так деньги настоящие они в итоге вгоняют весьма серьёзные в эту
игру, если посчитать в сумме, и самое забавное - это удерживает их в игре! :roll:
Типа - "я туда столько денег вгрохала, жалко бросать!" - есть у меня такая онлайн-знакомая.. :lol:

Но графика там весьма привлекательная, скажу я тебе...

_________________
iLavr


18 Oct 2020 02:55
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Ну у меня нету настоящих денег и софт открытый - если кому не нравится, то пусть берёт и делает свою версию с графикой получше :lol:

P.S. По поводу того с какой графикой игры нынче супер-популярны можно скажем посмотреть в сторону Among Us ;)

 AmongUsVideos

https://youtu.be/gGc3PyKItPU


https://youtu.be/76eMU6tR1g8

Игра существует для PC и для телефонов - мои детки по ней с ума сошли :rotate:

_________________
:dj: https://mastodon.social/@Shaos


18 Oct 2020 15:03
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Post Re:
Shaos wrote:
Померял с секундомером скорости - если принять, что высота (и ширина) одного куба (один этаж) составляет около 2 метров, то игрок ходит со скоростью 17 км/ч, а бегает - со скоростью 50 км/ч (стометровку с такой скоростью можно пробежать за 7.2 секунды)

Это я неправильно 10 лет назад посчитал - высота одного куба всё-таки 3 метра (или на американский манер - 10 футов), соответственно скорость хождения получается 25 км/ч, а беганья - 75 км/ч
Просто уровень глаз в варианте существующем с 2011 года составляет 38 пикселов от уровня земли что в случае 3 метров переводится в 38 / 64 * 3 = 1.78м, что будет давать рост человекоподобных персонажей примерно в 1.9м что как бы примерно ок...

_________________
:dj: https://mastodon.social/@Shaos


19 Oct 2020 19:05
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Shaos wrote:
Померял с секундомером скорости - то игрок ходит со скоростью 17 км/ч, а бегает - со скоростью 50 км/ч (стометровку с такой скоростью можно пробежать за 7.2 секунды)

Это я неправильно 10 лет назад посчитал - скорость хождения получается 25 км/ч, а беганья - 75 км/ч ... рост человекоподобных персонажей примерно в 1.9м что как бы примерно ок...

В обоих случаях у тебя ну оооооочень шустрые "человекоподобные персонажи ростом примерно в 1.9м"... :lol:
Если учесть что максимальная скорость бега "человекоподобных" обычно не превышает 45 км/ч,
то 50 км/ч - это "как бы примерно ок...", но 75 км/ч - это уже супер-"человекоподобные"! :roll:

_________________
iLavr


19 Oct 2020 21:22
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Lavr wrote:
Shaos wrote:
Shaos wrote:
Померял с секундомером скорости - то игрок ходит со скоростью 17 км/ч, а бегает - со скоростью 50 км/ч (стометровку с такой скоростью можно пробежать за 7.2 секунды)

Это я неправильно 10 лет назад посчитал - скорость хождения получается 25 км/ч, а беганья - 75 км/ч ... рост человекоподобных персонажей примерно в 1.9м что как бы примерно ок...

В обоих случаях у тебя ну оооооочень шустрые "человекоподобные персонажи ростом примерно в 1.9м"... :lol:
Если учесть что максимальная скорость бега "человекоподобных" обычно не превышает 45 км/ч,
то 50 км/ч - это "как бы примерно ок...", но 75 км/ч - это уже супер-"человекоподобные"! :roll:

Я понимаю, однако если сделать медленнее, то будет сильно тормозно :)

_________________
:dj: https://mastodon.social/@Shaos


19 Oct 2020 22:48
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Я понимаю, однако если сделать медленнее, то будет сильно тормозно :)

Да я ж не призывал сделать медленнее, я просто удивился, что ты пересчитал заново... :lol:
И с первого разу было понятно, что "человекоподобные персонажи" у тебя шустрЫ! :wink:

Журнал "Хакер" как-то в шутку подсчитал, что носит с собой "человекоподобный компьютерный
персонаж" Гордон Фримен, так выяснилось, что он должен быть железный дровосек... :mrgreen:

_________________
iLavr


20 Oct 2020 14:16
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Shaos wrote:
Померял с секундомером скорости - если принять, что высота (и ширина) одного куба (один этаж) составляет около 2 метров, то игрок ходит со скоростью 17 км/ч, а бегает - со скоростью 50 км/ч (стометровку с такой скоростью можно пробежать за 7.2 секунды)

Это я неправильно 10 лет назад посчитал - высота одного куба всё-таки 3 метра (или на американский манер - 10 футов), соответственно скорость хождения получается 25 км/ч, а беганья - 75 км/ч
Просто уровень глаз в варианте существующем с 2011 года составляет 38 пикселов от уровня земли что в случае 3 метров переводится в 38 / 64 * 3 = 1.78м, что будет давать рост человекоподобных персонажей примерно в 1.9м что как бы примерно ок...

Решил снова сесть с секундомером и перемерять - от стенки до стенки сектора (62 куба или 186 метров если считать 3 метра на куб):
обычным шагом персонаж проходит за 24.9 секунд, что есть 7.47 метров в секунду или 26.9 км/ч,
а с нажатым шифтом - за 8.3 секунды, что есть 22.41 метров в секунду или 80.7 км/ч.
:o

P.S. А вообще размер одного сектора 64x64 квадрата в метрах составляет 192x192.
Теоретический предел размера виртуального города (как было задумано в 2000 году) составляет 100x100 секторов
или соответственно 19.2x19.2 км, что покроет к примеру большую часть города Екатеринбурга:
Attachment:
VirtEburg.gif
VirtEburg.gif [ 112.16 KiB | Viewed 8165 times ]

Сектора предполагалось нумеровать от 00_00 до 99_99, где первое число - координата сектора по оси X, а второе - координата сектора по оси Y.
Существующие на данный момент сектора строились вокруг центра города с координатами 50_50 в котором находится высотное здание муниципалитета.
При необходимости в-принципе можно продолжать развивать город вправо, увеличивая координату X и после 100.
Например, чтобы растянуть такой виртуальный город вдоль экватора нашей платены потребуется 208724 сектора по горизонтали.

P.P.S. В самом движке ограничения на размер одного сектора нет - разве что рендеринг луча прекращается при достижении расстояния в 100 единиц (кубиков).

P.P.P.S. На самом деле есть некий искусственный предел в 65536 кубиков по горизонтали, но это и так уже запредельно много для одного сектора (196.6км).

P.P.P.P.S. Вот как выглядит квадрат 192х192 метра (один сектор) на карте Манхеттена - туда целиком влезает 9/11 Memorial Park с двумя фонтанами на месте башен-близнецов:


Attachments:
Screenshot from 2020-10-23 01-31-27.png
Screenshot from 2020-10-23 01-31-27.png [ 511.38 KiB | Viewed 8164 times ]

_________________
:dj: https://mastodon.social/@Shaos
20 Oct 2020 15:54
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
У меня пока задача выкатить движок как есть для локального использования - в виде одного файла virtburg.c и затем уже добавлять возможность онлайнового общения и дописывать новые фичи.
На данный момент практически всё что нужно слеплено в один файл размером 3700 строк (специфические для винды 2000 строк сюда не включены - там работа с DirectX и обработка ответов сервера).
Ещё надо избавиться от нескольких C++ классов, заменив их на структуры и функции работы с ними (всё равно чаще всего у меня эти классы имели только по одному объекту).
Остающиеся снаружи GIF-декодер и класс виртуального диска (используется для чтения слепленных вместе стандартных текстур) также будут убраны до того, как я опубликую исходники...

_________________
:dj: https://mastodon.social/@Shaos


23 Oct 2020 00:17
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
В существующем движке нет дверей в обычном понимании, но их можно имитировать с помощью плоских спрайтов, которые поднимаются и опускаются программно - например вот так:

Attachment:
room_door1.png
room_door1.png [ 180.58 KiB | Viewed 8259 times ]

Размещение двери внутри коридорчика длиной 2, а лучше 3 кубика, спрячет дверь из области видимости, когда игрок не стоит точно напротив неё т.к. плоский спрайт всегда повёрнут лицом к игроку и со стороны будет видно, что дверь вывернута, что выглядит неестественно...

P.S. Сделал видео как это может выглядеть (под спойлером):
 video


_________________
:dj: https://mastodon.social/@Shaos


25 Oct 2020 18:53
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Решил снова сесть с секундомером и перемерять - от стенки до стенки сектора (62 куба или 186 метров если считать 3 метра на куб):
обычным шагом персонаж проходит за 24.9 секунд, что есть 7.47 метров в секунду или 26.9 км/ч,
а с нажатым шифтом - за 8.3 секунды, что есть 22.41 метров в секунду или 80.7 км/ч.
:o

Один коэффициент у меня был изменён какое-то время назад - вернул как было раньше (все подпрыгивания, пробегания и углы рассчитаны для 55 мс или 18.2 раза в секунду типа для совместимости с досом) и перемерял:
обычным шагом получилось 27.3 секунды или 24.53 км/ч,
а бегом - примерно 9.2 секунды или 72.78 км/ч,
ну т.е. грубо говоря 24 км/ч и 72 км/ч

P.S. Ещё померял у себя повороты - с нормальной скоростью полный поворот на 360 градусов осуществляется за 7 секунд, а с шифтом - за 3.5 секунды

P.P.S. Померял в думе - там 3 секунды на полный поворот независимо от того был нажат шифт или нет, так что я наверное тоже сделаю одинаково...

_________________
:dj: https://mastodon.social/@Shaos


25 Oct 2020 19:23
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 89 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6  Next

Who is online

Users browsing this forum: Alikberov and 20 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.