Огромный мир - система подгрузки

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Огромный мир - система подгрузки

Сообщение DirectXManiac » 30.06.2007 (Сб) 0:20

Ну ессесно сначала рассказываю общую концепцию. Имееться огромный мир - в основном открытый(за исключением пещер). Его размер настолько огромен что его почти нереально обойти. Примерно 40960х40960. А может и больше. Хотелось бы добиться нормальной детализации ландшафта, воды, объектов(различных пещер, гор). Поэтому надо разделить мир на квадраты. Собсно тут то и загвоздка. Квадраты, например 1024х1024, раскиданы по файлам и в таблице мира есть их имена и параметры. Собствено так. А вот как походу приближения к следующему квадрату начать подгружать его из файла. Причем подгружать как я понимаю все равно через For. А вот как сделать такую оптимизацию загрузке, чтобы она слегка снизила FPS а не затормозила игру и поставила надпись "Загрузка местности...".
Это тоже вариант, но все же хочеться чтобы все было в лучшем виде. Может подскажите как сделать сабж, или же есть другие пути сделать огромный и высокодетализированый мир...
Заранее спасибо.
#define ROFL 0xDDDD

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 30.06.2007 (Сб) 0:46

DirectXManiac
У тебя по любому карта мира на сервере лежать будет. Так что загрузка будет время занимать. А для асинхронной загрузки второй поток нужен.
Изображение

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Re: Огромный мир - система подгрузки

Сообщение Vovik » 30.06.2007 (Сб) 0:47

Во многих играх просто появляется слово ЗАГРУЗКА и все.. пользователь чуть-чуть ждет и наслаждается дальше.. На мой взгляд это само оптимально, если уж решил разбивать на части... :roll:

nekeda
Постоялец
Постоялец
 
Сообщения: 710
Зарегистрирован: 10.04.2005 (Вс) 23:20

Сообщение nekeda » 30.06.2007 (Сб) 2:46

У тебя по любому карта мира на сервере лежать будет.

карта мира на сервере? зачем?

Во многих играх просто появляется слово ЗАГРУЗКА и все..

не во многих - а во всех, где действительно большие ресурсоёмкие карты.. и подругому никак имхо.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 30.06.2007 (Сб) 10:16

nekeda
В ла2 например я заметил слово загрузка только когда летел на виверне :D Видимо хорошо сделано, или я мало ходил и только телепортом пользовался. Ладно се равно спасибо! Буду думать...
#define ROFL 0xDDDD

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 30.06.2007 (Сб) 13:05

Я не знаю правда как быстрее
но может быстрее вертекс буффер загрузить целеком
Get #F, , Vbuf()
чем по 1 элементу брать :)

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 04.07.2007 (Ср) 0:33

Bonesnapper
Представь сколько памяти надо будет :lol:
#define ROFL 0xDDDD

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 04.07.2007 (Ср) 10:12

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

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 04.07.2007 (Ср) 12:14

Bonesnapper
Ааа. Нет ну это ясно) Вопрос о подгрузке в нужный момент, как быть с For-ом?
#define ROFL 0xDDDD

Bonesnapper
Постоялец
Постоялец
 
Сообщения: 434
Зарегистрирован: 12.09.2004 (Вс) 15:39

Сообщение Bonesnapper » 04.07.2007 (Ср) 12:36

как ты будешь использовать ФОР если
ты сразу получишь вертекс буффер своего квадрата -который нужно подгрузить - и передашь его на прорисовку

может я непонял зачем Фор?
как я понял для вытаскивания вертексов из файла по 1?
что то типа этого
Код: Выделить всё
ReDim vBuf(m_NumVertices) As vFormat
  Seek #nf, fData + 1&
  i = SizeXY ^ 2 - 1
  For z = SizeXY - 1 To 0 Step -1
    For x = SizeXY - 1 To 0 Step -1
      If (x < SizeXY) And (z < SizeXY) Then Get #nf, , B
      vBuf(i).pos.x = ScaleSize * x + pos.x
      vBuf(i).pos.z = ScaleSize * z + pos.z
      vBuf(i).Diffuse = CLng("&H" & Hex$(color.a) & Hex$(color.R) & Hex$(color.G) & Hex$(color.B))
      vBuf(i).pos.y = B * ScaleY + pos.y
      vBuf(i).tu1 = x * TextureScaleX
      vBuf(i).tv1 = z * TextureScaleZ
      i = i - 1
    Next x
  Next z
  Close #nf

я же предлагаю
Код: Выделить всё
Open fName For Binary As #F
  Get #F, , MapInf
  ReDim Vbuf(MapInf.sizeY - 1, MapInf.sizeX - 1) As vFormat
  Get #F, , Vbuf()


хотя конечно не пробывал как быстрее получится

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 04.07.2007 (Ср) 14:49

В любом случае из файла будет грузиться некоторое время. Как вариант - использовать асинхронный ввод-вывод.
Изображение

DKbelRoma
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 282
Зарегистрирован: 13.09.2007 (Чт) 23:32
Откуда: Из Кривого Рога

Сообщение DKbelRoma » 23.11.2007 (Пт) 12:32

DirectXManiac а можеш выложить или исходник или саму программу твоего "БОЛЬШОГО МИРА" Пожалуйста.... Хотел бы посмотреть! :oops:
«Не важно, откуда ты. Важно - где ты.»

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 23.11.2007 (Пт) 16:41

Проект заморожен. Причём довольно давно.
Изображение

DKbelRoma
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 282
Зарегистрирован: 13.09.2007 (Чт) 23:32
Откуда: Из Кривого Рога

Сообщение DKbelRoma » 24.11.2007 (Сб) 11:30

Жаль! :? Рассказывали неплохо! Хотелось бы посмотреть! :wink:
«Не важно, откуда ты. Важно - где ты.»

Anubis
Обычный пользователь
Обычный пользователь
 
Сообщения: 53
Зарегистрирован: 02.11.2007 (Пт) 10:18

Сообщение Anubis » 24.11.2007 (Сб) 12:44

Думаю надо создать систему как в Elder Scrols Obilivion.
Там такие маркеры, они разделяют всю площадь игрового мира на круглые или квадратные области не помню, так вот один Run маркер зацеплен за игроком, на определённом растоянии все модели заменяются спрайтами, хотя есть методы проще, но там так... И если пересикаешь край маркера, подгружается ближайший от него...
Мы родились на этот свет, и ни кто не в праве его выключать!

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 11.12.2007 (Вт) 21:34

DKbelRoma
Проект слетел. Большой мир представлен кусками ландшафта 1024х1024... Таких кусков очень много. Ну ессесно отсечение тоже есть, а то грузило бы комп очень сильно. Мир в общей сложности 10240х10240 с водой рисуется со скоростью 80FPS без объектов. Сейчас работаю над своим ландшафтом, пока успехи таковы:
1024х1024 - с отсечением на 256 - 200FPS... Но выкладывать это чудо не стану... Дырок много. Может даже не запустится :D
#define ROFL 0xDDDD

DKbelRoma
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 282
Зарегистрирован: 13.09.2007 (Чт) 23:32
Откуда: Из Кривого Рога

Сообщение DKbelRoma » 12.12.2007 (Ср) 20:44

DirectXManiac Я понимаю что проэкт О-о-о-очень бльшой , и это в какойто мере круто:) Как доделаешь выложишь??
Посмотрим на твоё "чудо"!!! :wink:
«Не важно, откуда ты. Важно - где ты.»

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 13.12.2007 (Чт) 19:58

DKbelRoma
Ты про ландшафт или про ММОРПГ?))
#define ROFL 0xDDDD


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 51

    TopList