У меня есть два шейдера: пиксельный и вершинный.
Оба они вращают изображения.
Один из этапов - масштабирование изображения. Коэффициент масштабирования в обоих случаях равен 0,77328159.
Следуйте шейдерам и результатам процесса.
Вопрос в том, почему для пиксельных шейдеров мы делим коэффициент масштабирования, а для вершинных шейдеров мы его умножаем?
Сколькочем больше коэффициент масштабирования, тем более умиротворяющая картина.
Пиксельный шейдер
float fRadAngle = radians(fAngle);
float2 ptOrigin = input.Tex;
float2 ptPos = ptOrigin;
ptOrigin.x = (ptOrigin.x - 0.5) * fWidthSrc;
ptOrigin.y = (ptOrigin.y - 0.5) * fHeightSrc;
ptPos.x = ptOrigin.x * cos(fRadAngle) - ptOrigin.y * sin(fRadAngle);
ptPos.y = ptOrigin.x * sin(fRadAngle) + ptOrigin.y * cos(fRadAngle);
ptPos.x = ptPos.x / fWidthSrc;
ptPos.y = ptPos.y / fHeightSrc;
ptPos.x = ptPos.x / fScale + 0.5;
ptPos.y = ptPos.y / fScale + 0.5;
float4 pxRGB = float4( 0.0, 0.0, 0.0, 0.0 );
if( ptPos.x >= 0 && ptPos.x <= 1 && ptPos.y >= 0 && ptPos.y <= 1 )
pxRGB = tx.Sample(sampler_in, ptPos);
return pxRGB;
Вершинный шейдер
float2 ptPos = input.Pos.xy;
float2 ptOrigin = ptPos;
ptOrigin.x = (ptOrigin.x - 0.5) * fWidthSrc;
ptOrigin.y = (ptOrigin.y - 0.5) * fHeightSrc;
ptPos.x = ptOrigin.x * cos(fzRadAngle) - ptOrigin.y * sin(fzRadAngle);
ptPos.y = ptOrigin.x * sin(fzRadAngle) + ptOrigin.y * cos(fzRadAngle);
ptPos.x = ptPos.x / fWidthSrc;
ptPos.y = ptPos.y / fHeightSrc;
ptPos.x = ptPos.x * fScale + 0.5;
ptPos.y = ptPos.y * fScale + 0.5;
output.Pos.xy = ptPos.xy;
return output;
Установить отношение к: ptPos.x / fScale
и ptPos.x * fScale
Результат PS с масштабированием ~ 0,77:
(Для VS это в основном то же самое)
Результат PSс масштабированием 0,1:
(для VS это в основном то же самое)
Опять. PS есть логичное поведение. Чем больше коэффициент масштабирования, тем меньше получаемое нами изображение, поэтому деление на меньшее число приводит к большему числу ...
Почему VS дает то же самое с умножением?