Je suis un nouveau HLSL et j'essaie de comprendre un échantillon pixelisé. Cependant, je n'ai pas été en mesure de trouver une référence sur la façon dont quelques opérations sont. Voici l'exemple de shaders:Aide à comprendre l'effet Pixelate
//--------------------------------------------------------------------------------------
//
// WPF ShaderEffect HLSL -- PixelateEffect
//
//--------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------
// Shader constant register mappings (scalars - float, double, Point, Color, Point3D, etc.)
//-----------------------------------------------------------------------------------------
float HorizontalPixelCounts : register(C0);
float VerticalPixelCounts : register(C1);
//--------------------------------------------------------------------------------------
// Sampler Inputs (Brushes, including ImplicitInput)
//--------------------------------------------------------------------------------------
sampler2D implicitInputSampler : register(S0);
//--------------------------------------------------------------------------------------
// Pixel Shader
//--------------------------------------------------------------------------------------
float4 main(float2 uv : TEXCOORD) : COLOR
{
float2 brickCounts = { HorizontalPixelCounts, VerticalPixelCounts };
float2 brickSize = 1.0/brickCounts;
// Offset every other row of bricks
float2 offsetuv = uv;
bool oddRow = floor(offsetuv.y/brickSize.y) % 2.0 >= 1.0;
if (oddRow)
{
offsetuv.x += brickSize.x/2.0;
}
float2 brickNum = floor(offsetuv/brickSize);
float2 centerOfBrick = brickNum * brickSize + brickSize/2;
float4 color = tex2D(implicitInputSampler, centerOfBrick);
return color;
}
Je n'ai pas été en mesure de comprendre ce qui se passe dans le calcul:
float2 brickNum = floor(offsetuv/brickSize);
Je ne suis pas sûr de ce que la façon de calculer la division entre les deux vecteurs, et aussi je ne sais pas comment calculer le plancher d'un vecteur. (Je suppose que la division de deux float2 renvoie un float2).
Une idée?