Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Копаем клиент (http://mangos.ytdb.ru/forumdisplay.php?f=35)
-   -   Неровности ландшафта (http://mangos.ytdb.ru/showthread.php?t=7796)

HuntsMan 19.01.2014 23:10

Неровности ландшафта
 
Копаю карты в пандах, и возник вопрос, ответ на который я никак не могу найти. Каким образом задаются неровности ландшафта в клиентских файлах? (всякие горы, холмы и т.п.) Насчет всяких объектов типа заборчиков и т.п. понятно, что они в wmo, а где описывается сам ландшафт?

RomanRom2 20.01.2014 12:20

terrain, adt.

HuntsMan 21.01.2014 20:49

Распарсил я ADT файл в соответствии с http://www.pxr.dk/wowdev/wiki/index.php?title=ADT :
http://paste2.org/wk9HxFmK
Если присмотреться, то можно увидеть, что ofsHeight везде равен 0, чего по-идее быть не должно. Не в курсе из-за чего это может быть? Парсил вот так: http://paste2.org/02FODGmI

RomanRom2 21.01.2014 22:20

ofsHeight чего? там разные матрицы.

HuntsMan 21.01.2014 22:59

Цитата:

Сообщение от RomanRom2 (Сообщение 32399)
ofsHeight чего? там разные матрицы.

Насколько я понял, ofsHeight содержать в себе должен смещение в файле, где лежит сабчанк MCVT (матрица высот). Но это смещение постоянно равно 0 и сам сабчанк в файлах не нахожу.

RomanRom2 22.01.2014 11:48

нет, не так. в рассматриваемом объекте (чанке) все поля принадлежат этому рассматриваемому объекту, это оффсет этого чанка относительно родителя, а не где располагается что то там еще ниже/дальше. тут действует принцип "проблемы индейцев вождя не е.ут" :)

HuntsMan 22.01.2014 12:10

Цитата:

Сообщение от RomanRom2 (Сообщение 32421)
нет, не так. в рассматриваемом объекте (чанке) все поля принадлежат этому рассматриваемому объекту, это оффсет этого чанка относительно родителя, а не где располагается что то там еще ниже/дальше. тут действует принцип "проблемы индейцев вождя не е.ут" :)

Т.е. получается, что инфа по высоте будет где-то дальше после полей?

Add:
И правда, инфа после идет.
Цитата:

MCNK chunk:
Readed data: 1180 bytes. Total: 1180
Area Id: 0
Flags: 32768
Index X:Y: 0:0
nLayers: 0
nDoodadRefs: 0
ofsHeight: 0
ofsNormal: 0
ofsLayer: 0
ofsRefs: 0
ofsAlpha: 0
sizeAlpha: 0
ofsShadow: 0
sizeShadow: 0
nMapObjRefs: 0
Holes: 0
data1: 0
data2: 0
data3: 0
predTex: 0
noEffectDoodad: 0
ofsSndEmitters: 1180
ofsLiquid: 1180
sizeLiquid: 0
Position: X: 1600, Y: -1494,954, Z: 1600
ofsMCCV: 0
ofsMCLV: 0
effectId: 0
Sub chunks list:
Subchunk: MCVT
Data size: 580

Subchunk: MCNR
Data size: 448

Subchunk: MCSE
Data size: 0
Спасибо за помощь :)

RomanRom2 22.01.2014 23:29

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

HuntsMan 22.01.2014 23:49

Цитата:

Сообщение от RomanRom2 (Сообщение 32425)
не за что.
ну это базовая высота чанка. потом будут матрицы с оффсетами относительно базовой.

Вы про MCVT sub-chunk?

RomanRom2 24.01.2014 12:21

а фик их знает, я уж не помню названий :)
ну там где матрицы 8х8 и 9х9.

HuntsMan 24.01.2014 12:29

Цитата:

Сообщение от RomanRom2 (Сообщение 32480)
а фик их знает, я уж не помню названий :)
ну там где матрицы 8х8 и 9х9.

Ну да, это он и есть :)

HuntsMan 24.01.2014 14:58

Вот ещё такой вопрос возник: пытаюсь отрисовать тайл средствами OpenGL. Чанки по отдельности отрисовываются замечательно, но как только пытаюсь их объединить вместе получается полный бред. Отрисовкой конкретного чанка занимается этот код:

Код:

        public void DrawMap(MCNK adt_MCNK)
        {
            foreach (Chunk subchunk in adt_MCNK.subchunksList)
            {
                if (subchunk.chunkname == "MCVT")
                {
                    MCVT adt_MCVT = (MCVT)subchunk;

                    for (int x = 0; x < 8; x++)
                    {
                        for (int y = 0; y < 8; y++)
                        {
                            float nL1 = adt_MCVT.getValNoLOD(x, y);
                            float nL2 = adt_MCVT.getValNoLOD(x, y + 1);
                            float nL3 = adt_MCVT.getValNoLOD(x + 1, y);
                            float nL4 = adt_MCVT.getValNoLOD(x + 1, y + 1);
                            float L = adt_MCVT.getValLOD(x, y);

                            int XOff = adt_MCNK.IndexX * 7;
                            int YOff = adt_MCNK.IndexY * 7;

                            glVertex3f(XOff + y, YOff + x, nL1);
                            glVertex3f(XOff + y + 1, YOff + x, nL2);
                            glVertex3f(XOff + y + 0.5f, YOff + x + 0.5f, L);

                            glVertex3f(XOff + y, YOff + x, nL1);
                            glVertex3f(XOff + y, YOff + x + 1, nL3);
                            glVertex3f(XOff + y + 0.5f, YOff + x + 0.5f, L);

                            glVertex3f(XOff + y, YOff + x + 1, nL3);
                            glVertex3f(XOff + y + 1, YOff + x + 1, nL4);
                            glVertex3f(XOff + y + 0.5f, YOff + x + 0.5f, L);

                            glVertex3f(XOff + y + 1, YOff + x, nL2);
                            glVertex3f(XOff + y + 1, YOff + x + 1, nL4);
                            glVertex3f(XOff + y + 0.5f, YOff + x + 0.5f, L);
                        }
                    }
                    break;
                }
            }
        }

Получается вот так: https://www.dropbox.com/s/t8flx5tibn...2015.18.54.png
Там какая-то особая последовательность чанков должна быть?

RomanRom2 24.01.2014 22:02

там должен быть индексный файл с инфой как располагаются чанки, wdt файлы. но вообще это сетка 64х64.
у нас получалось так: http://wowcore.ru/forum/?theme=1f4a8...83472215ec211f


Текущее время: 04:54. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS