
// вершинный шейдер
VSOutput VSMain(VSInput input)
{
// объект для выходных данных
VSOutput output;
// трансформируем позицию вершины
float xoops = input.position.x-8*cos(radians(time/10+3*input.position.x));
float yoops = input.position.z-6*sin(radians(time/35+1.5*input.position.z));
float zoops = 8*cos(radians(time/10+3*input.position.x))+6*sin(radians(time/35+1.5*input.position.z));
output.position = mul(float4(input.position.xyz+float3(xoops,zoops,yoops),input.position.w), matrixWorldViewProj);
// трансформируем и нормализуем нормаль
float x0 = input.position.x+0.5f-8*cos(radians(time/10+3*(input.position.x+0.5f)));
float y0 = input.position.z+0.5f-6*sin(radians(time/35+1.5*(input.position.z+0.5f)));
float z0 = 8*cos(radians(time/10+3*(input.position.x+0.5f)))+6*sin(radians(time/35+1.5*(input.position.z+0.5f)));
float x1 = input.position.x-0.7f-8*cos(radians(time/10+3*(input.position.x-0.7f)));
float y1 = input.position.z+0.5f-6*sin(radians(time/35+1.5*(input.position.z+0.5f)));
float z1 = 8*cos(radians(time/10+3*(input.position.x-0.7f)))+6*sin(radians(time/35+1.5*(input.position.z+0.5f)));
float x2 = input.position.x+0.6f-8*cos(radians(time/10+3*(input.position.x+0.6f)));
float y2 = input.position.z-0.9f-6*sin(radians(time/35+1.5*(input.position.z-0.9f)));
float z2 = 8*cos(radians(time/10+3*(input.position.x+0.6f)))+6*sin(radians(time/35+1.5*(input.position.z-0.9f)));
/*
строю матрицу
!x y z !
!x1-x0 y1-y0 z1-z0 !
!x2-x0 y2-y0 z2-z0 !
*/
float a = (y1-y0)*(z2-z0)-(y2-y0)*(z1-z0);
float b =-((x1-x0)*(z2-z0)-(x2-x0)*(z1-z0));
float c = (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0);
output.normal = normalize(mul(float3(a,b,c), matrixWorld));
// переписываем текстурные координаты
output.texCoords = input.texCoords+float2(sin(radians(time/15))/5,cos(radians(time/15))/5);
// возвращаем результат
return output;
}
Кажется я сделал первый шаг в шейдеры
В шейдерах при размышлениях о тени, отражении и преломлении ключевое слово это кубомапа?