Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.27;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
4-1193385687
leonidus
2007-10-26 12:01
2008.07.27
Drag файла на TImage


15-1212825413
Vlad Oshin
2008-06-07 11:56
2008.07.27
чем С# вкусна?


15-1212756716
Kolan
2008-06-06 16:51
2008.07.27
Научите ставить ссылки на рисунки в Word е.


1-1196157020
Pakito
2007-11-27 12:50
2008.07.27
Послать комбинацию клавиш стороннему приложению


2-1214230754
evgenij
2008-06-23 18:19
2008.07.27
В чем рисовать