Форум: "Игры";
Текущий архив: 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.006 c