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

Как создать миникарту?

Страницы: 1 2 Следующая »
#0
(Правка: 12:55) 12:52, 4 апр. 2021

Здравствуйте все.
Хочу понять принцип создания и работы миникарты в 3D играх от первого лица.
миникарта01 | Как создать миникарту?
Я саму мини-карту карты(тавтология, но как есть) приаттачиваю к точке крепления на экране танка, миникарта вращается, так как направлен сам танк, всё отлично, но как на ней отобразить нужные мне объекты(игроков, важные места, такие же танки и т.д.).
Если я пытаюсь созданым спрайтом следовать за этой мини-картой, получается совсем нехорошо, каждый тик спрайт нагоняет отставание, потом останавливается(между тиками) и снова догоняет.

Должен быть какой-то другой способ отображения спрайта на мини-карте, без отставания, как то приатачить не к точке, а к плоскости мини-карты что-ли.
Какие есть способы?

И сразу еще один вопрос, не сочтите за наглость, как можно обрезать углы мини-карты, что бы она вращалась как бы внутри квадрата, отсекая углы.


#1
14:00, 4 апр. 2021

Ортографическая проекция видом сверху, которая двигается вместе с игроком по центру. Необходимые остальные объекты — просто разноцветные точки. Так их и рендеришь.
Первое что пришло в голову

#2
14:51, 4 апр. 2021

Отдельная камера сверху рисует какой-нибудь рендер-мод сцены и объектов.

#3
(Правка: 14:58) 14:57, 4 апр. 2021

Сама текстура карты(для радара) у меня есть, я её накладываю на 3D модель самой миникарты.
Мне нужно по этой текстуре(которая на модели) рендерить игроков и прочее. Проблема в том, что миникарта на танке, танк постоянно двигается, и соответственно все точки(игроки и прочее должны по мини-карте перемещаться)
Я не совсем понял, что значит с игроком по центру? Хотя бы для начала такой вариант решить, без прочего, просто игрок, чья мини-карта пусть будет высвечиваться на ней, поподробнее бы как-то, если можно.
Если я правильно понял, всё будет происходить вокруг игрока? Грубо говоря, игрок на мини-карте стоит на месте, а все крутится и передвигается вокруг него, сама карта естественно тоже?
Но всё равно тогда останется отставание при рендере. И даже если так, а как текстуру карты смещать вокруг игрока?

#4
15:00, 4 апр. 2021

lookid
> Отдельная камера сверху рисует какой-нибудь рендер-мод сцены и объектов.

Такое в юнити-подобных движках пройдет, а у меня движек source, он только одну камеру тянет.

#5
15:08, 4 апр. 2021

lookid
> Отдельная камера сверху рисует какой-нибудь рендер-мод сцены и объектов.

Хорошо, а как игроков подсвечивать? Или другие объекты. Не будет же камера их посвечивать, она сделает саму карту сверху(это у меня есть), остаётся показать на этой карте местоположения других игроков.

#6
16:50, 4 апр. 2021

tonline_kms65
Тут просто проецировать позицию со сцены на карту с масштабом. Берешь xy, без z.

#7
17:17, 4 апр. 2021

tonline_kms65
> движек source, он только одну камеру тянет.
https://youtu.be/4ddJ1OKV63Q?t=287

#8
15:10, 5 апр. 2021

Шейдер?

#9
(Правка: 18:21) 18:05, 7 апр. 2021

lookid
> Тут просто проецировать позицию со сцены на карту с масштабом. Берешь xy, без z.

Проблема в том, что монитор дрона прикреплён не к монитору(экран компьютера), а закреплён на самом Дроне, т.е. координата z так же двигается.
Если бы понять как закрепить экран монитора дрона на самом экране компьютера(не знаю понятно объясняю или нет), конечно было бы намного легче. Там можно было бы и модель от первого лица свою ставить, да и вообще много что упростилось бы.
Хотя, что-то здесь я возможно недопонимаю, с этими камерами. Даже если я смогу установить камеру в центре экрана компьютера, что это получится?
Я, кстати, уже тему создавал, как и по какому принципу работают камеры, как у них получаются плавные движения. Пока без ответа. Если понять как эти камеры работают, возможно всё встанет на свои места.

#10
(Правка: 18:18) 18:06, 7 апр. 2021

Ranma
> https://youtu.be/4ddJ1OKV63Q?t=287

Интересный видос.
Я знаю что можно делать и по 2 и по 3 монитора, сам такое делал, но это при создании карт, в редакторе. Как это сделать программно я не знаю, пробовал - не получилось. Да даже если и получится, толку? Что она будет смотреть? Сверху, как бегают игроки?

#11
18:30, 7 апр. 2021

tonline_kms65
https://lmgtfy.app/?q=source+engine+create+minimap
:)

#12
(Правка: 8:50) 8:24, 8 апр. 2021

Не знаком с движком source, но по идее, если есть координаты всех объектов в пространстве мира, то можно сделать так:
1) Ставим центр карты в 0,0 пространства мира.
2) Игнорируем Y компоненту(высоту).
3) Берем ширину и длину карты в пространстве мира, делаем на основе этого матрицу и высчитываем   
    обратную матрицу.
4) Далее получаем координаты объектов в нормализованном пространстве миникарты( т.е. x и y от 0 до 1) посредством умножения координат объектов в пространстве мира на обратную матрицу, рассчитанную выше.
6) Теперь рендерим квадратики, треугольнички и что еще угодно на миникарте по полученным координатам, используя текстурные координаты геометрии(3д модели).

UPD: или можно сделать еще проще.
Берутся нормализованные координаты из пункта 4. Строится матрица вида

mX/sX 0 0 pX
0 mY/sY 0 pY
0 0 0 0
0 0 0 1

где mX, mY - размеры миникарты; sX, sY - размеры экрана; pX, pY - вектор между центром экрана и центром миникарты.

Эта матрица умножается на нормализованные координаты (x,y,z,1) из пункта 4. Получаются координаты на экране, по которым нужно отрендерить полигон.

#13
(Правка: 6:02) 2:10, 9 апр. 2021

Ranma
Вот бы всегда так просто всё  было.

Нет,  это совсем не то,  это генерация уменьшеннной карты в разрезе, так сказать рендер карты в текстуру,  для вывода её  на радар(миникарту).
Мне нужен процесс работы программного кода,  т. е.  как на этой тектуре карты отображаются нужные объекты.
Нет ни одной статьи о программировании миникарты или радара для source, и вообще такого нет нигде, нет исходников на counter-strike:source, есть исходники на HL2, но там, насколько я знаю, радара и миникарты нет.
Нашел слитые(ворованные) исходники csgo, попробую разобраться, как там сделано, там-то точно радар есть.

#14
(Правка: 6:12) 6:06, 9 апр. 2021

Kaylent
> Игнорируем Y компоненту(высоту).

И остаётся наш  радар в том месте, где его создали, там мигает, вращается и т.д.
В том то и дело что сам экран, на котором расположена миникарта, находится на танке, соответственно при движении танка должна двигаться и карта, вот в чём проблема. Если бы понять как отобразить миникарту на экране монитора игрока(клиента), тогда бы все было проще, но я пока не могу понять как это сделать.
Возможно у меня ошибка при создании объекта(танка), я на танк креплю экран с информацией, а точно посередине экрана закрепляю на танке камеру. Такой FOV получается, ближе к экрану-больше значки, дальше от экрана-значки меньше(значки информации, и так же в виде значка мини-карта).

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