我是新的HLSL,我正在尝试理解像素化样本。但是,我还没有找到关于一些操作如何的参考。以下是着色器示例:
//--------------------------------------------------------------------------------------
//
// 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;
}
我无法理解正在进行的计算:
float2 brickNum = floor(offsetuv / brickSize);
我不知道如何计算两个向量之间的除法,我也不知道如何计算向量的平面。 (我假设两个float2的除法返回一个float2)。
有什么想法吗?
答案 0 :(得分:1)
HLSL运算符和函数通常使用float2等具有x和y的结构。
地板内的分区返回float2
,其中x
和y
是将x
与x
和{{1}分开的结果与y
。而且,floor将返回y
,其中结果的float2
和x
是输入的y
和x
的覆盖值(结果为分裂)。
对于float3和其他类似结构也是如此。