Вращение текстуры в шейдере

Шейдеры и все-все-все.

Вращение текстуры в шейдере

Сообщение Zodjeks 23 сен 2018, 19:54

Всем привет.
Интересует вопрос, как вращать только одну текстуру в шейдере, погуглив получилось сделать вращение всех через матрицу.
В шейдерах не особо разбираюсь, буду благодарен любой помощи.
Собственно вот фрагмент вращения текстур в шейдере
Синтаксис:
Используется csharp
float _DetailAngle;
int _isRotat;
void vert (inout appdata_full v) {
v.texcoord.xy -=0.5;
if (_isRotat==45) { _DetailAngle=-0.786; }
if (_isRotat==-45) { _DetailAngle=0.786; }
if (_isRotat==90) { _DetailAngle=-1.57; }
if (_isRotat==-90) { _DetailAngle=1.57; }
if (_isRotat==180) { _DetailAngle=-3.14; }
if (_isRotat==-180) { _DetailAngle=6.28; }
float s = sin ( _DetailAngle);
float c = cos ( _DetailAngle);

float2x2 rotationMatrix = float2x2( c, -s, s, c);
rotationMatrix *=0.5;
rotationMatrix +=0.5;
rotationMatrix = rotationMatrix * 2-1;
v.texcoord.xy = mul ( v.texcoord.xy, rotationMatrix );
v.texcoord.xy += 0.5;
}

Может быть как-то по-другому можно добиться вращения одной текстуры?
Заранее спасибо.
Zodjeks
UNец
 
Сообщения: 15
Зарегистрирован: 19 апр 2015, 20:11

Re: Вращение текстуры в шейдере

Сообщение Cr0c 24 сен 2018, 01:31

Не в v.texcoord.xy вращение сохраняй, а в отдельную переменную, её и будешь использовать как координату при получении пикселя.
Cr0c
Адепт
 
Сообщения: 2808
Зарегистрирован: 19 июн 2015, 13:50

Re: Вращение текстуры в шейдере

Сообщение Zodjeks 24 сен 2018, 20:27

Cr0c писал(а):Не в v.texcoord.xy вращение сохраняй, а в отдельную переменную, её и будешь использовать как координату при получении пикселя.

Ну предположим float2 uv2 : TEXCOORD1;
Где мне ее объявлять и как обратиться к ней в surf ?
Если смешивал в surf текстуру с текстурой для вращения (_DetailMap) так
Синтаксис:
Используется csharp
fixed4 tex = tex2D(_MainTex, IN.uv_MainTex)* _MainColor;
tex.rgb *= tex2D(_DetailMap,IN.uv_DetailMap).rgb*_DetailRange;
Zodjeks
UNец
 
Сообщения: 15
Зарегистрирован: 19 апр 2015, 20:11

Re: Вращение текстуры в шейдере

Сообщение Zodjeks 29 сен 2018, 18:16

Собственно сделал)
Кому интересно
Синтаксис:
Используется csharp
float _DetailAngle;
void vert (inout appdata_full v) {
v.texcoord1 = v.texcoord;   //сохраняем uv для вращения одной текстуры  
v.texcoord1.xy -= 0.5;
float s, c;
sincos(radians(_DetailAngle), s, c);
float2x2 rotationMatrix = float2x2(c, -s, s, c);
v.texcoord1.xy = mul(v.texcoord1.xy, rotationMatrix);
v.texcoord1.xy += 0.5;
}


 
Zodjeks
UNец
 
Сообщения: 15
Зарегистрирован: 19 апр 2015, 20:11


Вернуться в Shader Lab

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2