2

JavaFX で水の 2D 波効果を実装するにはどうすればよいですか。画像があり、画像をクリックすると波 (またはそれ以上) がそのポイントから拡大し始めます。拡大する。

4

2 に答える 2

0

このチュートリアルではGLSL/HLSLカスタムピクセル シェーダをに使用する方法を見つけることができますJavaFX。また、HLSL 形式の screenSpace での単純なディストーション プロシージャル ウェーブのコードは次のとおりです。

uniform extern texture ScreenTexture;    

sampler ScreenS = sampler_state
{
    Texture = <ScreenTexture>;    
};

float wave;                // pi/.75 is a good default
float distortion;        // 1 is a good default
float2 centerCoord;        // 0.5,0.5 is the screen center

float4 PixelShader(float2 texCoord: TEXCOORD0) : COLOR
{
    float2 distance = abs(texCoord - centerCoord);
    float scalar = length(distance);

    // invert the scale so 1 is centerpoint
    scalar = abs(1 - scalar);

    // calculate how far to distort for this pixel    
    float sinoffset = sin(wave / scalar);
    sinoffset = clamp(sinoffset, 0, 1);

    // calculate which direction to distort
    float sinsign = cos(wave / scalar);    

    // reduce the distortion effect
    sinoffset = sinoffset * distortion/32;

    // pick a pixel on the screen for this pixel, based on
    // the calculated offset and direction
    float4 color = tex2D(ScreenS, texCoord+(sinoffset*sinsign));    

    return color;
}
technique
{
    pass P0
    {
        PixelShader = compile ps_2_0 PixelShader();
    }
}

お役に立てば幸いです。

于 2013-06-06T12:44:14.567 に答える