Показать сообщение отдельно
Старый 13.07.2011, 16:26   #166
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

// вершинный шейдер
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;

Кажется я сделал первый шаг в шейдеры

В шейдерах при размышлениях о тени, отражении и преломлении ключевое слово это кубомапа?

Последний раз редактировалось dsd, 10.08.2011 в 03:06.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (13.07.2011)