forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   DDD Карта Таилами (http://forum.boolean.name/showthread.php?t=4218)

Horror 21.08.2007 17:53

DDD Карта Таилами
 
Всем привет !
вот делаю игровое "поле"

в самой реализации вопросов не возникло ,что то вроде этого
(облегченный вариант)

Код:


Type TSquare
 Field ent
 Field typ%
End Type
Const MSize=16
Dim Map.TSquare(MSize,MSize)
...
СОЗДАНИЕ КАРТЫ:
 
For y=0 To MSize
 For x=0 To MSize
  Map.TSquare(x,y)=New TSquare
  Map(x,y)\ent=ДЕЛАЕМ КВАД :ScaleEntity Map(x,y)\ent,1.92,1.92,1.92
        Map(x,y)\typ% = ЧИТАЕМ ФАИЛ ДЛЯ ТИПА
  PositionEntity  Map(x,y)\ent,x*12,0,y*12
  MoveEntity  Map(x,y)\ent,0,Rnd(-2,2),0
....
 Next
Next

в чем вопрсос : У Меня при карте 16-16 все нормально ,а вот при 32-32 уже подтормаживает ( : Вообщем как мне ОБЪЕДЕНИТЬ ВСЕ ТАИЛЫ в один меш НО ЧТоб я попрежнему мог обращаться к
каждому объекту по отдельности (чтобы к примеры перекрасить таил в другой цвет) что вроде АддМешь? и сильно ли меня это спасет от лагов ?

и вопрос номер ТУ (он проще):
вот сейчас высота таилов у меня определяется так: MoveEntity Map(x,y)\ent,0,Rnd(-2,2),0
но разброс между таилами по высоте не равномерный!
как мне написать функцию чтобы высота соседних таилов была не значительно (выше\ниже) соседних но разбрасывалсь в диапозоне

чтото вроде этого (пс код ошибок не дает ну чтто особенно ничего не происходит):

IGR 21.08.2007 18:03

Re: DDD Карта Таилами
 
задай в типе высоту , а потом делай так:
tile(i,j)\visota = tile(i-1,j-1)\visota+rnd(-5,5) ;так вроде!!
хотя эту строчку можно переделать по удобней !!

Horror 21.08.2007 19:37

Re: DDD Карта Таилами
 
)) вопроса ты не понял!
вот при РНД будет у меня так (к примеру : )
1 -5 4 -2
-4 4 1 3
5 2 5 2
1 -2 -1 -5

т.е. эти цифры это высота и как видно соседние не рядом (по высоте!!! )
а мне надо примерно так
0 1 2 1
1 2 3 2
1 1 2 2
2 1 1 1
т.е нет скачка больше че 1! типо плавно!
ну этот вопрос для меня не важен! )
темболее я придумал как это сделать!
потом у меня появилась другая идейка кидать чб бмп фаил 32-32
и читать каждый пиксель чем чернее тем выше (типо карты высот! )

___________

Ктонить на первый вопрос ответит? как мне склеить все объекты чтоб потом я попрежнему мог бы обращаться к каждому по отдельности
И сильно ли это спасет пою производительность

Horror 21.08.2007 19:41

Re: DDD Карта Таилами
 
А яж не написал чем твои пример ко мне не подойде
1) он идет только по диагонали)
2) а если сравнивать со всеми соседними вокруг каждого это заимет время ну так вот поэтому я придумал сделать карту высот из бмп фаила

жду ответик на 1-й вопросиг

johnk 21.08.2007 19:42

Re: DDD Карта Таилами
 
Цитата:

кидать чб бмп фаил
лучше .raw там нет лишней инфы, кроме цвета пикселя.

moka 21.08.2007 20:17

Re: DDD Карта Таилами
 
Horror, он тебе подкинул идею, а не реализацию.
По диагонали? А кто мешает складывать все вокруг?:
Код:

For x=-1 to 1
  For y=-1 to 1
  Next
Next

Хм, а ты не пробовал изначально создавать вручную платформы в одном меше?

Horror 21.08.2007 21:05

Re: DDD Карта Таилами
 
Изначально так и было! но щас у меня не квады а модельки
вот код
Код:


groundmesh=CreateMesh()
...
For x=0 To MSize
 For y=0 To MSize
  Map.TSquare(x,y)=New TSquare
  Map(x,y)\ent=CopyEntity(TILE_MDL) :ScaleEntity Map(x,y)\ent,1.92,1.92,1.92
    AddMesh groundmesh ,Map(x,y)\ent
...

ну и вот чтото я не заметил прирост производительности :( что обидно

и наверника я делаю чтото не так! лечите меня)

IGR 22.08.2007 17:51

Re: DDD Карта Таилами
 
Цитата:

У Меня при карте 16-16 все нормально ,а вот при 32-32 уже подтормаживает
какая производительность ??
между 16 и 32 разница в 4 раза !! так и должно в принципе подтормозить !!

Horror 22.08.2007 18:08

Re: DDD Карта Таилами
 
Не не в этом смысе! я прекрасно понимаю разницу между 16 и 32
просто если делать квадами(два треугольника) то карта 32-32 этоже всегоже 1024 полигона, ну в принципе если я зугружу модель
которая будет в кадре и весить стоко же таких тормазов не будет (проверял)
это видимо из за того что каждый квад это свои мешь
и их надо объединиить !!
вот я их и при создание и создавал вместе (просто к одному мешу все квады приделывал, как МоКа написал !) ну и тормаза исчезли!! я был рад!

но потом я решил что квады не рулят и решил загружать модельку
вот я ее загрузил
и при создание создал пустои мешь и все копии моделек
присоединял командой АддМеш
но тормаза ушли не значительно (
вот и типо спрашивал может я не так АддМешь пишу (кстати никто не оветил, что обидно Ж( .... )

Ну лады у меня щас как я сделал 40-60 фпс думую пока хватит
потом ченить придумаю...

IGR 22.08.2007 18:13

Re: DDD Карта Таилами
 
40-60 фпс с 1024 поликами (если я не ошибаюс) - жость !!
здесь действительно что-то не так !!

ЛысыЙ_Чук-Иванчук 22.08.2007 23:49

Re: DDD Карта Таилами
 
Дааа,
Выход-
Пополегонка;)

Horror 23.08.2007 00:50

Re: DDD Карта Таилами
 
Цитата:

Дааа,
Выход-
Пополегонка
Чето непоняло?

Все вообщем я дотыкался! у меня терь 70-80 фпс это норм!
приладил дельта таимниг терь всегда 60 и не тормозит
я счаслиФ!

терь новенький вопрос!
Как правельно тыкать в сетку!
т.е не так)
тыкаю я через Пикед ентити
вот я тыкнул по объекты мне терь надо вернуть хандел
чтобы я мог глумиться над этим объектом!
т.е. не так)
сейчас у меня перебор по типу и возращаю пикнутого
но както не катит так ведь перебирать более 1000
елементов в типе - не хорошо (
вот типо как это сделать через Объект-Хандел
исключая полный перебор!
т.е. как то так ..)

Вообщем суть :
При наваодки на объект элемету типу присвоить статус=1
если наводки нет то статус=0

Мне от перебора не уйти? чтоб обратно статус в 0 ? так?

Кто понял этот набор слов жду ответа)
так и знал пить не стоит...

MiXaeL 23.08.2007 11:11

Re: DDD Карта Таилами
 
Поятитал тут и не понял после AddMesh используешь FreeMesh? (при AddMesh моделька не просто добавляется, а добавляется с копированием)

Horror 23.08.2007 11:40

Re: DDD Карта Таилами
 
А ты уверен?
1) Команды ФрииМеш чета не нашел (тока фриентити)
ну и вот пример
создаем 3 куба и добовляем их к мешу
ну и при удаление изначальных 3-х кубов
ни где не видно что чтото осталось у меша?
может че не так делаю?

Цитата:

Graphics3D 640,480,16,2

cam=CreateCamera()
l=CreateLight()
c1=CreateCube() : PaintEntity c1,CreateBrush(128,1,1) : MoveEntity c1,-2,0,6
c2=CreateCube() : PaintEntity c2,CreateBrush(1,128,1) : MoveEntity c2,0,0,6
c3=CreateCube() : PaintEntity c3,CreateBrush(1,1,128) : MoveEntity c3,2,0,6
mesh=CreateMesh()
AddMesh mesh,c1
AddMesh mesh,c2
AddMesh mesh,c3
Repeat

If KeyHit(1) End
If MouseHit(1) And c1<>0 FreeEntity c1 : c1=0
If MouseHit(2) And c2<>0 FreeEntity c2 :c2=0
If MouseHit(3) And c3<>0 FreeEntity c3 :c3=0

UpdateWorld
RenderWorld
Flip
Forever

ПС ПРЕДИДУЩИЙ ВОПРОС ЕЩЕ НЕ РЕШЕН (НЕ БОЛЬНО СТАРАЛСО ))

H@NON 23.08.2007 11:58

Re: DDD Карта Таилами
 
ВОт так будет правильнее:
ЗЫ выдрал из тутора Scavena

Код:

Global Player=CreateSphere()

 

Plac=CreateCone(8)

RotateMesh Plac,-90,0,0

ScaleMesh Plac,1,1,1.2

PositionMesh Plac,0,0,-1.5

AddMesh Plac,Player

EntityType Player, TypePlayer

EntityColor Player,0,255,0

 

FreeEntity Plac



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

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