jetyb писал(а):Не поняли. Ваше фреймовое разбиение (16 фреймов) и то разбиение что задано в TextureSheetAnimation (100 на 100) - это разные разбиения. Разбиение из TextureSheetAnimation служит только для определения номера кадра. Ячейки вашего фреймового разбиения и их смешение вычисляются через код.
К примеру.
Пусть разбиение в TextureSheetAnimation задано как (100 на 100).
Пусть в фрагментный шейдер вошел пиксель с текстурными координатами (0.346 , 0.723). Значит он соответствует [34, 72] клетке или 72 * 100 + 34 = 7234 / 10 000 кадру анимации.
В диапазоне 0 - 1 он с малой погрешностью соотвествует моменту времени 0.7234.
В 16 - кадровом разбиении это 16 * 0.7234 = 11.5744 - то есть смешение 11 и 12 кадра с коэффицентом 0.5744.
Текстурные координаты пикселей из 16 - кадрового разбиения по текстурным координатам пикселя в 10 000 кадровом разбиении.
Дальше. Как найти текстурные координаты для отдельного кадра.
Прямоугольник кадра вашего 16 -кадрового разбиения по номеру кадра вы можете найти. Пусть известны его x,y, width, height.
Входной пиксель (0.346 ; 0.723) имеет координаты ((0.346 - 0.34 ) * 100, (0.723 - 0.72) * 100) = (0.6 , 0.3) относительно этого прямоугольника кадра.
Значит он соответствует координатам (x + 0.6 * width, y + 0.3 * height) в текстуре.
Попробовал написать шейдер.
Вот кусочек вертексного кода
Используется csharp
v2f vert (appdata_t v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.color = v.color;
int gridX = (int)(v.texcoord.x*100);
int gridY = (int)(v.texcoord.y*100);
float frameWithLerp = ((gridX * 100 + gridY) / (100*100)) * 16;
int frame = (int) frameWithLerp;
float lerpVal = frameWithLerp - frame;
float x = frame%4;
float y = 1 - (int)(frame/4) * 0.25;
float offsetX = v.texcoord.x*100 - gridX;
float offsetY = v.texcoord.y*100 - gridY;
o.texcoord = (x + offsetX * 0.25, y + offsetY * 0.25);
//o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
return o;
}
Кадр всегда розовый, texture sheet animation 100 на 100. Хотел отладить шейдер
http://docs.unity3d.com/ru/current/Manual/SL-DebuggingD3D11ShadersWithVS.html, но студия вываливает кучу ошибок при дебаге.
Где я мог ошибиться?