Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2014, 19:48   #1
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
Вопрос Формат COLLADA, текстурные координаты

Здравствуйте.

Модель загружаю в формате COLLADA, парсер самописный. С скелетной анимацией разобрался, а вот текстуру наложить не могу=(

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

< input semantic="VERTEX" source="#Genesis2Male-geom-mesh-vertices" offset="0"/>
< input semantic="TEXCOORD" source="#Genesis2Male-geom-mesh-map-0" offset="1" set="0"/>
< vcount >3 ...< /vcount >
< p >31 0 32 1 524 2 ...< /p >

индексы вершин - 31 32 524
индексы текстур - 0 1 2

Из них нужно создать один общий для вершин и для текстурных координат индексный массив.

Не смог ничего придумать, кроме вот этого
Код:
struct indecesStruct
{
    std::vector<int> ind;
};
Код:
    std::vector<float> newtextures;
    std::vector<float> newvertices;
    std::vector<float> newweights;
    std::vector<float> newbones;
    std::vector<indecesStruct> newindeces;
    int i, e, j;
    j = 0;
    for(i = 0; (unsigned int) i < indeces.size(); i++)
    {
        indecesStruct ggg;
        newindeces.push_back(ggg);
        for(e = 0; (unsigned int) e < indeces[i].ind.size(); e++)
        {
            newtextures.push_back(textures[indecesTexture[i].ind[e] * 2]);
            newtextures.push_back(textures[(indecesTexture[i].ind[e] * 2) + 1]);

            newvertices.push_back(vertices[(indeces[i].ind[e] * 3)]);
            newvertices.push_back(vertices[(indeces[i].ind[e] * 3) + 1]);
            newvertices.push_back(vertices[(indeces[i].ind[e] * 3) + 2]);

            newweights.push_back(weights[(indeces[i].ind[e] * 8)]);
            newweights.push_back(weights[(indeces[i].ind[e] * 8) + 1]);
            newweights.push_back(weights[(indeces[i].ind[e] * 8) + 2]);
            newweights.push_back(weights[(indeces[i].ind[e] * 8) + 3]);
            newweights.push_back(weights[(indeces[i].ind[e] * 8) + 4]);
            newweights.push_back(weights[(indeces[i].ind[e] * 8) + 5]);
            newweights.push_back(weights[(indeces[i].ind[e] * 8) + 6]);
            newweights.push_back(weights[(indeces[i].ind[e] * 8) + 7]);

            newbones.push_back(bones[(indeces[i].ind[e] * 8)]);
            newbones.push_back(bones[(indeces[i].ind[e] * 8) + 1]);
            newbones.push_back(bones[(indeces[i].ind[e] * 8) + 2]);
            newbones.push_back(bones[(indeces[i].ind[e] * 8) + 3]);
            newbones.push_back(bones[(indeces[i].ind[e] * 8) + 4]);
            newbones.push_back(bones[(indeces[i].ind[e] * 8) + 5]);
            newbones.push_back(bones[(indeces[i].ind[e] * 8) + 6]);
            newbones.push_back(bones[(indeces[i].ind[e] * 8) + 7]);

            newindeces[i].ind.push_back(j);
            j++;
        }
    }
Костей и весов у меня по 8 на вершину.

После этого, у модели почему-то отображаются только 2 ноги и шея, то есть из 27 частей тела, каждая из которых находится в отдельном индексном массиве, отображаются только 3. Ну это я скорее всего накосячил. Мне вот не нравится увеличение массивов вершин, весов и костей в шесть раз.

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

Спасибо за внимание.

Последний раз редактировалось gunsoy; 07.03.2014 в 19:53.
gunsoy вне форума Ответить с цитированием
Старый 07.03.2014, 20:48   #2
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
По умолчанию

Косяк исправил, но памяти в VBO на модель уходит много=(
gunsoy вне форума Ответить с цитированием
Старый 11.03.2014, 10:00   #3
intmain
Играюсь с Python
Форумчанин
 
Аватар для intmain
 
Регистрация: 12.12.2012
Сообщений: 340
По умолчанию

сколько: вершин/треугольников?
какой: формат вертекса?
Что ел то - в долг, что жил то - зря.
Для избранных. ))
Секретные разработки
intmain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
КАК ПЕРЕДЕЛАТЬ ФОРМАТ mp4 В ФОРМАТ 3gp,MPEG4 kamalruslan Софт 4 20.08.2015 16:16
Даны координаты трёх точек, являющихся вершинами некоторого параллелограмма. Найти координаты четвертой вершины. yamato_pm Паскаль, Turbo Pascal, PascalABC.NET 1 18.12.2013 19:42
Даны координаты n точек (xi,yi). Найти координаты вершин одного из квадратов, из заданного множества точек. khariton Visual C++ 0 14.11.2013 09:36
Как преобразовать формат времени в числовой формат solnce60 Microsoft Office Excel 1 28.04.2013 11:16
Мировые Координаты И Координаты Устройства lebedun Win Api 6 19.08.2012 14:47