Форум: "Игры";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];
Внизsmd2v12-src большая модель приводит к Out of memory Найти похожие ветки
← →
Kav (2007-02-20 17:51) [0]http://www.igrodel.ru/glsl-bones.htm
скачал этот пример smd2v12-src про скелетную анимацию, но стаккнулся со странным багом не могу понять, при загрузке сравнительно больших моделек выдает ошибку типа
---------------------------
Project1
---------------------------
Out of memory.
---------------------------
ОК
---------------------------
, не могу точно отловить ошибку как-будто когда я пошагово нажимаю F8, ошибка не появляется, но стоит нажать F9, то все конец.
← →
@!!ex © (2007-02-20 18:08) [1]Юзаешь чужие сорцы?
В свое время разбирался с smd, на примере, где скелет бегает.
Тоде куча багов, и все такое.
Переписал все с 0. Не Copy&Paste, а именно вникал в каждую строчку кода и писал свою реализацию.
В итоге все отлично работает. Плюс куча возможностей, типа объединения анимаций, получения позиции конкретной ноды и все такое.
← →
Belorus © (2007-02-20 19:42) [2]@!!ex дай человеку свои сырцы :) Может ему горит :)
← →
Kav (2007-02-20 19:46) [3]Все сорцы хороши, но вот этот smd2v12-src он хорош тем что в нем
скелетка реализована на вершинных шейдерах :)
Кстати я так понял что в SMD нет материалов есть только текстуры или это не так?
← →
@!!ex © (2007-02-20 20:04) [4]
> Все сорцы хороши, но вот этот smd2v12-src он хорош тем что
> в нем
> скелетка реализована на вершинных шейдерах :)
Не так давно пришел к выводу, что выгоднее разбивать вершины по принадлежности к ноде и просто выставлять в API нужную матрицу трансформации. Тогда и проц не грузиться и шейдеров не надо. н алюбом старье работает. Правда еще не успел реализовать. Времени пока нету.
> @!!ex дай человеку свои сырцы :) Может ему горит :)
Если надо, без проблем. только не хочу выкладывать на общее обозрение. Чтобы не позориться. ;)
> Кстати я так понял что в SMD нет материалов есть только
> текстуры или это не так?
Это так.
← →
Kav (2007-02-20 20:14) [5]>Не так давно пришел к выводу, что выгоднее разбивать вершины по >принадлежности к ноде и просто выставлять в API нужную матрицу >трансформации. Тогда и проц не грузиться и шейдеров не надо. н алюбом >старье работает. Правда еще не успел реализовать. Времени пока нету.
если я правильно тебя понял,что у тебя деформаций не будет а там где стык костей - произойдет разрыв тела, а еслия тебя не правильно понял то хотелось бы увидеть это и пощупать
Кстати если не тяжело то сорцы свои вышли на kavi5@yandex.ru, все легче разбираться когда сорцов больше
← →
@!!ex © (2007-02-20 22:01) [6]
> Kav (20.02.07 20:14) [5]
Полигонов принадлежащих нескольким нодам обычно не так много их реально посчитать и на проце. Хотя это чисто мои мысли.
← →
Kav (2007-02-21 09:27) [7]@!!ex
в принципе да идея не плохая, я никогда этого не замечал!
← →
Kav (2007-02-21 09:35) [8]@!!ex
Хотя вообще-то надо практически хотябы посчитать сколько вершин принадлежат сразу двум костям и прикинуть какая производительность будет, но все же круто будет если приличная по скорости анимация будет без VS
← →
@!!ex © (2007-02-21 17:43) [9]
> Kav (21.02.07 09:35) [8]
Чем выше детализация модели, тем ниже процент таких полигонов(Вершина может принадлежать только одной ноде. ;)).
← →
Sapersky (2007-02-21 20:05) [10]Не так давно пришел к выводу, что выгоднее разбивать вершины по принадлежности к ноде и просто выставлять в API нужную матрицу трансформации. Тогда и проц не грузиться и шейдеров не надо. н алюбом старье работает. Правда еще не успел реализовать. Времени пока нету.
В DX SDK 8.1 (www.clootie.ru) есть пример SkinnedMesh с реализацией шейдерного и нешейдерного методов. Можно сравнить скорость (я сейчас на интегрированной карте особой разницы не увидел, что и понятно, она TnL не поддерживает вообще, так или иначе всё на CPU).
← →
Kav (2007-02-22 10:06) [11]Sapersky
но там не известно как они нешейдерный метод реализовали, ну сегодня на работу пойду скачаю посмотрю, но если честно сказать в в этом DX SDK черт голову сломит :)
← →
Sapersky (2007-02-22 12:35) [12]Результаты на Radeon 9000 Pro:
D3D Non-Indexed - 665
D3D Indexed - 766
Software - 232
D3D Indexed (VS) - 800
Шейдер всё-таки оказался немного быстрее.
Cледует учесть, что используется версия шейдеров 1.0, которая проще и на большинстве карт работает быстрее (GLSL, видимо, использует 2.0, судя по тому, что не запускается на поддерживающей только первые шейдеры карте).
Сам шейдер (точнее, шейдеры - я так понял, для случаев с разным кол-вом матриц) находится в ресурсах (skinnedmesh81.res).
Что касается нешейдерных методов - см. мануал к DX SDK по темам Geometry Blending, Indexed Vertex Blending.
Если коротко, то принцип такой: в D3D можно выставить одновременно несколько матриц трансформации. При этом в формат вершины включаются коэффициенты, которые задают влияние каждой матрицы на данную вершину.
В случае Non-Indexed можно задать одновременно до 4 матриц, модель рендерится по частям (похоже на то, что предлагал @!!ex).
В случае Indexed в формат вершины дополнительно включаются 4 байта, задающие индексы в "матричной палитре", т.е. одновременно можно использовать 256 матриц, т.е. фактически все сразу и выводить модель за один приём. Indexed не поддерживается аппаратно некоторыми старыми картами, GeForce2MX, например (работает, но медленнее чем Non-indexed).
Наверняка в OpenGL есть нечто подобное, посмотрите расширения.
← →
@!!ex © (2007-02-22 12:56) [13]
> Cледует учесть, что используется версия шейдеров 1.0, которая
> проще и на большинстве карт работает быстрее (GLSL, видимо,
> использует 2.0, судя по тому, что не запускается на поддерживающей
> только первые шейдеры карте).
Если не ошибаюмь,
шейдеру нужно в начале указывать какую он версию требует и тогда 1.0 спокойно запускатся.
← →
Sapersky (2007-02-22 13:49) [14]На интегрированной карте пример с http://www.igrodel.ru/glsl-bones.htm вываливается на glCreateShaderObjectARB (AV at adress 00000000), т.е. расширение в принципе не поддерживается. В то же время шейдерные демки DX SDK 8.1 и 3DMark2001 крутятся вполне успешно.
← →
Kav (2007-02-23 02:15) [15]Сегодня посидел вечерок, частично переписал что-то, где-то вдумался в код с которого передираю (кстати передирал с примера smoothtexs), и о чудо смог загрузить в свой движек, потом отобразил модель, попробывал проиграть анимацию (которую я сразу сделал на VS 1.1), вроде работает и все это я сдела за один вечер!
только меня пугает одно пример с которого я делал есть CheckBox, возле которого надпись "Интерполяция углов (глюки)", я случаем не глючный пример передрал?
← →
Kav (2007-02-23 14:07) [16]@!!ex
как ты делаешь Интерполяция углов, а то что даже переписал как сам понимал этот участок кода но от гльков не избавился
нахожу сначала изменение угла между кадрами
aF:=(animcia.kadri[sledKadr].povorot[i][n] -animcia.kadri[kadr].povorot[i][n]);
а потом прибавляю к углу на кадре изменение угла от времени
TempPovorot[n]:=(animcia.kadri[kadr].povorot[i][n] +(af*timeKadr));
но увы есть кадры в которых одна нога поворачивается больше чем нужно на число Пи
может ты можешь поточне подсказать фомулу Интерполяция углов?
← →
@!!ex © (2007-02-23 19:18) [17]
> Kav (23.02.07 14:07) [16]
Интерполяцию углов желательно делать через кватернионы.
Они позволяют многих багов избежать.
Сам я в этом не особо силен, мало касался этого вопроса.
← →
Kav (2007-02-23 19:19) [18]понятно, пойду переписывать!
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.008 c