1

これに基づいて MandelBrot シェーダーを作成しました: http://blogs.msdn.com/b/shawnhar/archive/2006/12/11/sixty-fractals-per-second.aspx

float4 PixelShader(float2 texCoord : TEXCOORD0) : COLOR0
{
    float2 c = (texCoord - 0.5) * Zoom * float2(1, Aspect) - Pan;
    float2 v = 0;

    for (int n = 0; n < Iterations; n++)
    {
        v = float2(v.x * v.x - v.y * v.y, v.x * v.y * 2) + c;
    }

    return (dot(v, v) > 1) ? 1 : 0;
}

フロートよりも精度の高いものを使用して、ズームできる量を拡張したいと思います。http://www.bealto.com/mp-mandelbrot_fp128-opencl.htmlなど、オンラインでいくつかのことを読みましたが、理解するのがかなり難しく、不完全です。

私が使用している GPU は double をサポートしていないため、32 ビットの int と float (および最大 4 の長さの float のベクトル/配列) に固執しています。

通常の浮動小数点数よりも正確な方法で単一の浮動小数点数を表すにはどうすればよいですか?

サポートする必要がある操作は、 x+-および ( > または>= )です。

ピクセル シェーダー モデル 3.0 を使用しています。


私はQ 数値形式を見てきましたが、問題は、2 つの 32 ビット整数を使用する場合、乗算 (および除算) に 64 ビットの一時変数が必要になることです。

4

1 に答える 1

2

次のブログ投稿では、GLSL で 2 つの float を使用して倍精度をエミュレートするなど、説明した問題のいくつかに取り組んでいます。

http://www.thasler.org/blog/?p=93

「エミュレートされた倍精度」をグーグルで検索すると、さらにいくつかのリンクが表示されるはずです。

于 2011-10-18T15:14:41.327 に答える