Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];

Вниз

Glscene скелетная анимация на шейдере   Найти похожие ветки 

 
Kav   (2007-01-15 17:17) [0]

Glscene скелетная анимация на шейдере, есть ли где примеры ?


 
Samarik   (2007-01-15 18:28) [1]

В каком смысле на шейдере?


 
Kav   (2007-01-15 19:04) [2]

чтобы анимация выполнялась с помощью вершинных шейдеров, в смысле разгружаем процессорное время перекладвая все на плечи видеокарты


 
Samarik   (2007-01-15 21:21) [3]

?


 
@!!ex ©   (2007-01-15 21:41) [4]


> Samarik   (15.01.07 21:21) [3]

Тоесть к вершинам матрица преобразования кости применяется на на уровне ЦПУ, а на уровне ГПУ.


 
Kav   (2007-01-15 23:30) [5]

в общем одним словом когда анимация реализована с помощью шейдеров можно моделек 300 анимировать без особы тормозов и  в каждой будет около 3000 полигонов


 
@!!ex ©   (2007-01-16 00:13) [6]

Ну дык в чем проблема то?


 
Баян   (2007-01-16 04:34) [7]

А разве это вообще возможно?
Ты где такое вычитал то?


 
grisme ©   (2007-01-16 08:40) [8]

так зачем привязываешь АНИМАЦИЮ и ШЕЙДЕРЫ. такого понятия там нет. ты просто будешь считывать данные об интерполяции с помощью CPU, а производить ВЕРШИННУЮ ТРАНСФОРМАЦИЮ(трансляцию точнее), исходя из вычисленной интерполяции.. примеров вроде много( gamedev.ru рулед )

поэтому как сказал @!!ex © в [6]


 
XProger ©   (2007-01-16 09:03) [9]

Kav,
В данном случае ты смотришь в область где GLScene тебе только враг...
uniform vec4 Matrix[32 * 3];

void main(void)
{
 vec4 Index  = gl_Color * 256.0;
 vec4 Weight = gl_MultiTexCoord1;
 Weight.z = 1.0 - (Weight.x + Weight.y);

 vec4 VMat[3];
 VMat[0] = vec4(0.0);
 VMat[1] = vec4(0.0);
 VMat[2] = vec4(0.0);
// skinning
 for (int i = 0; i < 3; i++)
 {
   int idx = int(Index[i]);
   VMat[0] += Matrix[idx + 0] * Weight[i];
   VMat[1] += Matrix[idx + 1] * Weight[i];
   VMat[2] += Matrix[idx + 2] * Weight[i];
 }

 vec3 Vertex = vec3(dot(VMat[0], gl_Vertex),
                    dot(VMat[1], gl_Vertex),
                    dot(VMat[2], gl_Vertex));
...
 gl_Position = gl_ModelViewProjectionMatrix * vec4(Vertex, 1.0);
 gl_FrontColor = vec4(1.0);
}

GLSL. Skinned Mesh анимация расчитанная на 3 кости влияющие на вершину. Веса костей нормировны находятся в двух текстурных координатах второго блока (GL_TEXTURE1_ARB). Вес третьей кости расчитывается как 1.0 - (s + t). Индексы всех трёх костей задаются цветом вершины (rgb). Массив матриц костей Matrix содержит в себе по 3 строки каждой из матриц (четвёртая = 0001 не нужна абсолютно) и расчитан на 32 кости.

Никаких разъяснений по поводу: "Что такое GLSL?", "Как расчитать трансформации кости?", "Как передать в шейдер матрицы?" давать не собираюсь. Для этого есть спецификация языка и учебники математики.

grisme, найдёшь хоть один пример на gamedev - получишь пирожок :)


 
Samarik   (2007-01-16 17:17) [10]


> Тоесть к вершинам матрица преобразования кости применяется
> на на уровне ЦПУ, а на уровне ГПУ.
>


А по русски можно?


 
@!!ex ©   (2007-01-16 17:21) [11]


> А по русски можно?

Что есть анимация?
Это перемещение и вращение кости.
Задается оно естественно в виде матрицы трансформации, куда загоняются эти углы и перемещение.

Как примернить анимацию на меш? Умножить каждую вершину на матрицу трансформации соответствующей кости.

Где это можно делать? На ЦПУ(Центральное Процессорное Устройство), а шейдеры позволяют освободить ЦПУ от этой лишней нагрузки и перенести вычисления на ГПУ(Графическое Процессорное Устройство), которое оптимизированно для вычисления чисел с плавающей точкой и комплекса этих чисел(вектора, матрицы)


 
Samarik   (2007-01-16 17:27) [12]

понял, но мне до этого ещё далеко, меня и эта анимация (корявая) пока устраивает, я больше md3 люблю, но он тупой!:)


 
Hero ©   (2007-01-17 11:34) [13]

я то думал что пазл в полном смысле, а оказывается там "элемент" не фигурный а квадратный.
А фигурный элемент , как в настоящем пазле слабо сделать?


 
@!!ex ©   (2007-01-17 11:39) [14]

Не слабо. :)
А написать в правильный топик?



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
2-1205147901
Dmitriy
2008-03-10 14:18
2008.04.06
Режим только_чтение/редактирование для компонентов


15-1203873940
Поп Гапон
2008-02-24 20:25
2008.04.06
Фальшивый диплом можно распознать


2-1205302664
Phoenix
2008-03-12 09:17
2008.04.06
Как перекинуть рисунки из одного ImageList в другой?


2-1204905452
savyhinst
2008-03-07 18:57
2008.04.06
Отн. путь в абс путь.


15-1203941482
Незнайка...
2008-02-25 15:11
2008.04.06
Что такое командная работа в Delphi ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский