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 不支持双精度,所以我坚持使用 32 位整数和浮点数(以及长度不超过 4 的浮点数向量/数组)。

我如何以比普通浮点数允许的更精确的方式表示单个浮点数?

我需要支持的操作是x+-和(>>=

我正在使用像素着色器模型 3.0。


我看过Q 数字格式,但是,我遇到的问题是,如果我使用 2 个 32 位整数,我需要一个 64 位临时变量来进行乘法(和除法)。

4

1 回答 1

2

以下博客文章解决了您描述的一些问题,包括在 GLSL 中使用 2 个浮点数模拟双精度。

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

谷歌搜索“模拟双精度”应该会抛出更多链接。

于 2011-10-18T15:14:41.327 回答