2011-04-29 12 views
0

私は新しい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); 

私は2つのベクトル間の分裂を計算する方法がわからないんだけど、また、ベクトルの床をどのように計算するかもわかりません。 (私は2つのfloat2の除算がfloat2を返すと仮定しています)。

答えて

1

HLSL演算子と関数は、xとyを持つfloat2のような構造体で動作することがよくあります。

床内部の分割はxyyxyxを分割した結果であるfloat2を返します。そして床はfloat2を返します。結果のxyは、入力のxyのフロアされた値(除算の結果)です。

float3などの類似した構造についても同じことが言えます。

関連する問題