forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Mini map (http://forum.boolean.name/showthread.php?t=8809)

G.A.D 31.07.2009 02:06

Mini map
 
На сколько я знаю есть нескольо способов создания мини карты..
Я пользуюсь следующим:
создаю вторую камеру и направляю её вниз
пример:
PHP код:

mmc CreateCamera()
   
CameraViewport mmc,width-mmz,height-mmz,mmz,mmz
PositionEntity mmc
,EntityX(pl),100,EntityZ(pl
   
RotateEntity mmc,90,EntityYaw(pl),EntityRoll(pl

но он не очень производительный!
как можно по другому создать?

Knightmare 31.07.2009 02:08

Ответ: Mini map
 
Рисовать примитивами схематично.

G.A.D 31.07.2009 02:12

Ответ: Mini map
 
Knightmare можете разъеснить весь алгоритм

Knightmare 31.07.2009 02:17

Ответ: Mini map
 
Ох е. Как все запушено.
У тебя есть карта (ландшафт) и информация о всех объектах на ней (если нет - закрыть это окно, отрыть IDE, Ctrl+A, Del, написать код заново). Исходя из этой информации можно примитивами (прямоуголькники, точки, по желанию маленькие картинки) изобразить карту схематично (рисуем ландшафт сперва, травку зелеными точками, песок - желтыми, поверх рисуем всякие деревья, скалы другими цветами, потом всякие строения, юнитов). Если не ошибаюсь принцип этого проходят на уроках географии в 5 классе.
З.Ы. Ландшафт также можно представить картинкой цветной и соответственно рисовать поверх тока здания/юниты. Короче зависит от ситуации.

G.A.D 31.07.2009 02:22

Ответ: Mini map
 
Спасибо,но ты Меня совсем убил!Я имел ввиду ни это!
Как в прямоуголник вписать точку нахождения унита на карте

Knightmare 31.07.2009 02:24

Ответ: Mini map
 
Координаты есть? Перевести тогда их в другую систему, не?
З.Ы. В конце концов, есть гугл. Он знает. Даже код.

G.A.D 31.07.2009 02:27

Ответ: Mini map
 
Он знает не понятный код!Я второй способ не понимаю
вот накидал но точки нету
PHP код:

rect h-200,w-200,200,200,0
plot EntityX
(pl),entityZ(pl

точки вообще нету

NitE 31.07.2009 02:33

Ответ: Mini map
 
сам незнал как делать миникарту - теперь стало интересно. после минуты поиска нашел
Цитата:

Translating from 3D to 2D coordinates is simple.

CameraProject will project a 3D coordinate (entityx, entityy and entityz of each entity) into 2D coordinates.

Get the result using ProjectedX() and ProjectedY()
You may want to "feed" CameraProject an x and z in place of an x and y (swap them around or shuffle until happy) to return 'useful' ProjectedX() and ProjectedY() coords.

So, divide these results to fit a smaller rectangle, and offset to draw where you want in your minimap.

G.A.D 31.07.2009 02:36

Ответ: Mini map
 
тоже находил но куб был не в месте мини карты

Knightmare 31.07.2009 02:49

Ответ: Mini map
 
Есть куб. У него есть координаты. Есть точка отсчета (0, угол карты, вше дело). Расчитываем координаты относительно этой точки. Переводим в систему карты (например вся карта в мировых координатах от (0.0, 0.0, 0.0) до (1000.0, 0.0, 1000.0), у нас миникарта имеет масштаб 1:10, т.е. тпо делим на 10 координаты куба, было (500.0, 0.0, 240.0) полчили (50, 24) на миникарте). Рисуем примитив. Повторять для каждого объекта. Упрощать/оптимизировать под свои нужды.
З.Ы. Мето перевода довльно грубый, но суть отражает.

G.A.D 31.07.2009 02:51

Ответ: Mini map
 
спасибо Knightmare сейчас попробую написать

G.A.D 31.07.2009 18:50

Ответ: Mini map
 
PHP код:

CameraProject (cam,EntityX(pl),EntityY(pl),EntityZ(pl))

UpdateWorld 
RenderWorld
Rect 0
,0,200,200,0
Rect ProjectedX
()/5,ProjectedY()/5,20,20
FLIP 

Координаты объекта по середине квадрата!что не так?

Knightmare 31.07.2009 18:52

Ответ: Mini map
 
Сожги себя.
Нахрен здесь проецирование НА ЭКРАН?!

IGR 31.07.2009 19:04

Ответ: Mini map
 
Цитата:

Нахрен здесь проецирование НА ЭКРАН?!
+1 !!

для простоты зделай перса своего центром радара !!
- радар размером 100 рх на 100 рх, т.е. перс будет стоять в точке радара 50,50 !!
- бери кусок реального мира запихуй в радар !! для этого нужен масштаб 1 рх радара = 10 единиц блицовских !!
- таким образом в радар попадут все обекты которы находятся в (-500, 500 поХ) и (-500, 500 поZ) !!
для их отображения возьми какие-то спрайтики или картинки и русуй в координатах соответсвующих !!

also: http://forum.boolean.name/showthread.php?t=4064&highlight=%CA%E0%F0%F2%E0+%F 0%E0%E4%E0%F0

G.A.D 31.07.2009 22:28

Ответ: Mini map
 
а что за render to texture разве в блице он есть?

NitE 31.07.2009 22:30

Ответ: Mini map
 
render to texture - рендер в текстуру, и да, он есть

ABTOMAT 31.07.2009 22:55

Ответ: Mini map
 
Цитата:

render to texture - рендер в текстуру, и да, он есть
и да, его нет.
Можно лишь отрендерить в бэкбуфер и скопировать рект оттудова.
В Ксорсе - да, есть

NitE 31.07.2009 22:59

Ответ: Mini map
 
как так ? что тогда такое рендер в текстуру ?

Knightmare 31.07.2009 23:01

Ответ: Mini map
 
Это когда напрямую туда рисуешь (быстро типа).

ABTOMAT 31.07.2009 23:01

Ответ: Mini map
 
Рендер в текстуру - это когда рендерят прямо в текстуру а ничего никуда не копируют

IGR 03.08.2009 14:05

Ответ: Mini map
 
setbuffer imagebuffer(img)
а сюда можно рендерить ??

ABTOMAT 03.08.2009 14:07

Ответ: Mini map
 
Цитата:

Сообщение от IGR (Сообщение 112835)
setbuffer imagebuffer(img)
а сюда можно рендерить ??

Нѣтъ

G.A.D 29.08.2009 23:02

Ответ: Mini map
 
как нарисовать рамку?(выделение юнитов)
у меня получаеться треугольник(
x1=0
y1=0
x2=x1+MouseX()
y2=y1+MouseY()
If MouseDown(1) = True Then Line x1,0,MouseX(),0 Line 0,y1,0,MouseY() Line x2,0,0,x2 Line 0,x2,0,x2+y2

NitE 29.08.2009 23:08

Ответ: Mini map
 
Rect()

Spy4433 30.08.2009 01:15

Ответ: Mini map
 
Если я правильно понял про "рамку выделения" то вот может поможет...
Код:

Graphics 320,240,32,2
Repeat
Cls


If MouseHit(1) Then
x1=MouseX()
y1=MouseY()
EndIf

If MouseDown(1) Then
x2=MouseX()
y2=MouseY()
Line x1,y1,x2,y1
Line x1,y2,x2,y2
Line x1,y1,x1,y2
Line x2,y1,x2,y2
EndIf

Flip

Until KeyHit(1)

:rolleyes:

impersonalis 30.08.2009 01:27

Ответ: Mini map
 
Цитата:

Сообщение от G.A.D (Сообщение 112677)
а что за render to texture разве в блице он есть?

когда ты делаешь SetBuffer BackBuffer()
ты устаналвиваешь текущий графиечский буффер - задний.
Ничто не мешает тебе поставить также:
TextureBuffer ( texture[,frame] )
ImageBuffer (handle[,frame])
FrontBuffer()

См.также GraphicsBuffer() и вообще почитай про буферы - затягивает)

impersonalis 30.08.2009 01:30

Ответ: Mini map
 
Цитата:

Сообщение от IGR (Сообщение 112835)
setbuffer imagebuffer(img)
а сюда можно рендерить ??

.да.
АВТОМАТ гворит, что нет. Честно говря - не догоняю. Поправьте, пожалуйста.

ABTOMAT 30.08.2009 01:36

Ответ: Mini map
 
Цитата:

Сообщение от impersonalis (Сообщение 116785)
.да.
АВТОМАТ гворит, что нет. Честно говря - не догоняю. Поправьте, пожалуйста.

Нѣтъ! :stop:
Смотрим в хелп:
Цитата:

RenderWorld
Renders the current scene to the BackBuffer onto the rectangle defined by each cameras CameraViewport( ). Every camera not hidden by HideEntity( ) or with a CameraProjMode( ) of 0 is rendered. Rendering to other buffers is currently not supported by Blitz3D.
Православная версия:
Цитата:

RenderWorld
Визуализирует текущую сцену в задний буфер (BackBuffer) в отдельный прямоугольник, установленный для каждой камеры командой CameraViewport( ). Каждая камера, не скрытая коммандой HideEntity( ) или параметром проекции CameraProjMode( ), отличным от нуля, визуализируется. Визуализирование в другой буфер в Blitz3D пока не поддерживается.

Артем Валерьевич 10.11.2009 21:51

Ответ: Mini map
 
Вложений: 1
Еще про минимап, а если у меня 3 Д обьект-радар, привязаный к камере.
На него наложена текстура-картинка. При движении игрока двигать и поворачивать текстуру. Сложности и непонятки возникли в движении этой текстуры.
Вот скрин:

Артем Валерьевич 10.11.2009 22:29

Ответ: Mini map
 
Карта задвигалась, но теперь другое, если персонаж уперся в стену а карта естественно продолжает двигаться, нужна добавить еще проверку на чтонибудь или наверно всетаки на координаты уровня и текстуры.

Knightmare 10.11.2009 22:32

Ответ: Mini map
 
Позиция текстуры должна рассчитываться по пзиции персонажа. Синхронно двигать перса и текстуру есть полнейший бред. Тут не нужно много ума. Простое преобразование координатных систем (3D мир => 2D карта).

Артем Валерьевич 10.11.2009 22:44

Ответ: Mini map
 
Знаю прямоугольник координат мира и прямоугольник текстуры, как мне сопоставить координаты?

NitE 10.11.2009 22:48

Ответ: Mini map
 
CameraProject camera,x#,y#,z#

Артем Валерьевич 10.11.2009 22:53

Ответ: Mini map
 
тоесть я получаю центр своего уровня, тоесть мира этой командой (CameraProject camera,x#,y#,z#) и потом позиционирую свою миникарту согласно полученным координатам?

Артем Валерьевич 10.11.2009 23:45

Ответ: Mini map
 
Но ведь персонаж вовсе не в центре карты.

непонимаю

NitE 10.11.2009 23:49

Ответ: Mini map
 
короче - чти хелп
3D Graphics -> Camera -> ...

Knightmare 11.11.2009 00:09

Ответ: Mini map
 
Зочем что-то проецировать? Тут математика за 3 класс:
Код:

х_координата_на_карте# = (мировая_х_координата# - начало_координат_х#) / ширина_мира# * ширина_карты#
y_координата_на_карте# = (мировая_y_координата# - начало_координат_y#) / высота_мира# * высота_карты#

Кто не понял - учебник за 3 класс, раздел о дробях и долях. Потом по этим координатам делаем чо надо.

Артем Валерьевич 11.11.2009 00:12

Ответ: Mini map
 
Knightmare спасибо, а вот с математикой у меня туго, уж простите, 2-

Артем Валерьевич 11.11.2009 00:18

Ответ: Mini map
 
а ктонибудь так уже делал миникарту?

Артем Валерьевич 11.11.2009 11:32

Ответ: Mini map
 
неполучается спозиционировать миникарту

IGR 11.11.2009 15:02

Ответ: Mini map
 
Цитата:

неполучается спозиционировать миникарту
объекты на миникарте не получается ?? ;)

что не получается ?? покажите код, может чем-то поможем !! :)

Артем Валерьевич 11.11.2009 15:32

Ответ: Mini map
 
Запутался я, вобщем код такой, вместе с персонажем гружу карту, цепляю к камере, позиционирую, накладываю текстуру карты:

Код:


minimap=LoadAnimMesh("TesData\tesBitmap\Tes_mapa01\minimap2.b3d",a.MatchMan\cam)
PositionEntity minimap,EntityX(a.MatchMan\cam)-.35,EntityZ(a.MatchMan\cam)+1.75,EntityY(a.MatchMan\cam)+.01
;PositionEntity minimap,GW%+2,GH%+3,+1
ScaleEntity minimap,.02,.02,.02
EntityOrder minimap,0
mapM=FindChild ( minimap,"Object01")
 
 
minimaptex=LoadTexture("TesData\tesBitmap\Tes_mapa01\minimap.png")
EntityTexture mapM, minimaptex,0,0
mapspeed#=0

затем в цикле при обновлении персонажа я пишу:

Код:


If UP Then:walksnd=True
 
If Pers_speed#<=0
Pers_speed#=0.75
Animate Tesey,2,Pers_speed#,1,0
EndIf
mapspeed#=mapspeed#+.0001*dt
MoveEntity a.MatchMan\PiwotPers,0,0,.01*dt
;PositionTexture minimaptex,0,+Pers_speed#
;PositionEntity a.MatchMan\Piwotcam,Sin( MilliSecs() )*.005 +.005,Sin( MilliSecs() )*.2 +.2,0
 
;EndIf
 
Else If DN Then:walksnd=True
 
If Pers_speed#<=0
Pers_speed#=0.75
Animate Tesey,2,Pers_speed#,1,0
EndIf
mapspeed#=mapspeed#-.0001*dt
 
u_position#=1
v_position#=1

затем ниже:

Код:


x#=EntityX (a.MatchMan\PiwotPers)
y#=EntityY (a.MatchMan\PiwotPers)
z#=EntityZ (a.MatchMan\PiwotPers)
CameraProject(a.MatchMan\cam,x#,y#,z#)

и в конце функции :

Код:


Next
PositionTexture minimaptex,ProjectedX()/2,ProjectedY()/2 
EndIf
End Function


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

Ky3R_94 11.11.2009 16:16

Ответ: Mini map
 
Не двигай карту отдельно, привяжи координаты текстуры к персонажу. Ты ж через UVW делаешь? Если да то будет работать. Но не проще ли через 2д делать?

З.ы. судя по тому, как быстро вы нашли решение к первому вопросу, просто удивительно, что вы сами не смогли пока справиться)

Артем Валерьевич 11.11.2009 16:31

Ответ: Mini map
 
Как привязать, непонимаю пока?

NitE 11.11.2009 16:32

Ответ: Mini map
 
a=b

Ваше сообщение слишком короткое. Оно должно быть не менее 4 символов.

Артем Валерьевич 11.11.2009 16:34

Ответ: Mini map
 
аааа, вот тупой я

Артем Валерьевич 11.11.2015 10:41

Ответ: Mini map
 
Вложений: 1
как говорится не прошло и полгода...

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

Вот моя минимапа.

impersonalis 11.11.2015 12:25

Ответ: Mini map
 
Обязательно текстурой, т.к. тогда сразу возможность таких эффектов как вращение, для сохранения постоянной ориентации героя на карте, плавной прокрутки (uv заюзать), полупрозрачности (чтобы не уменьшать обзор) и проч.
Делал подобное n лет назад для бродилки по лабиринту - ничего сложного, а пользы масса.

Артем Валерьевич 11.11.2015 12:28

Ответ: Mini map
 
так вот и я о том же, только не дотумкиваю пока до этого, чтоб текстурой.

Артем Валерьевич 01.12.2015 17:34

Ответ: Mini map
 
Вложений: 1
йохууууу!!!!!!!

побядил минимапу, !!!!!!


И подправил окончательно

Артем Валерьевич 02.12.2015 12:45

Ответ: Mini map
 
а вот короткое видео с работой карты:


https://youtu.be/5_hGl53jbzo

Артем Валерьевич 03.12.2015 11:16

Ответ: Mini map
 
А теперь следующий вопрос который возник у меня вчера, и он вполне логичен: как сделать чтобы к примеру объект стрелка на мини-карте указывал направление движения?

impersonalis 03.12.2015 11:57

Ответ: Mini map
 
Если общо:

AX=0 //координата игрока
AY=0 //координата игрока
LX=AX //память
LY=AY //память
while not ... //игровой цикл
...
//как реакция на нажатия координаты игрока меняются
AX..
AY..
...
dx=AX-LX //дельта по х
dy=AY-LY //дельта по х
arrow dx,dy //рисуем стрелку в соответствии
LX=AX
LY=AY
wend

если нужен угол из дельты координат - то atan2 надо юзать.
Для надёжности нужно прикинуть на бумажке как соотносятся:
оси координат Мира
оси координат миникарты
направления приращения угла на миникарте

Артем Валерьевич 03.12.2015 12:03

Ответ: Mini map
 
Вложений: 1
так с координатами вроде понятно, как стрелку вращать?
Стрелка - объект в центре карты.

пока только вращаю мини-карту.

Артем Валерьевич 03.12.2015 13:47

Ответ: Mini map
 
всё Импер, спасибо огромное тебе. А тангенс 2 помог.!

А вот и видос:

https://youtu.be/2HG9mCyQPvc

Nex 03.12.2015 14:03

Ответ: Mini map
 
Это тот самый солдатик которого делал ARA?

Артем Валерьевич 03.12.2015 14:06

Ответ: Mini map
 
эээээ, эта тот самый солдатик который шол в наборе к дарк бейсику!


Часовой пояс GMT +4, время: 06:41.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot