HY!
我有一个计算着色器:
[numthreads(128, 1, 1)]
void csAdvect(uint2 dtid : SV_DispatchThreadID)
{
uint4 dtl = uint4(dtid, 0, 0);
float2 inverseSize = float2(1.0f / gridSize.x, 1.0f / gridSize.y);
float2 coord = float2(dtid.x*inverseSize.x, dtid.y*inverseSize.y);
float statict = statictemp.Load(dtl).x;
if (statict < 0)statict = 0;
float t = temperature.SampleLevel(zeroBoundarySampler, coord, 0).x;
outputTemperature[dtid] = statict + t;
}
从静态纹理单元格中读取,对另一个进行采样并将其写入输出纹理。裸露的样品。 纹理和gridSize是512x512,我用Dispatch(4,512,1)调用它,在每个渲染步骤中我交换温度和outputTemperature纹理。
我认为它会做一些类似于静态点的圆形增长,但它只会向右下方增长。 左上角的黑色/红色是静态的“热量”,着色器的温度越小。
知道我做错了什么吗?
答案 0 :(得分:0)
所以关于坐标系转换......
如果你有一个512x512纹理,纹理可以作为一个数组从0,0到511,511采样,所以如果你想要它缩放到0,0到1,1你需要划分511而不是512!愚蠢的错误,但很难找到...