2016-04-10 8 views
1

Hy!HLSL ComputeShader Образец от текстуры ведет себя странно

У меня есть Compute Shader:

[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), и каждый шаг рендеринга меняет температуру и выводит текстуры температуры.

Я думал, что он будет делать что-то вроде кругового роста из статических точек, но вместо этого растет только прямо вниз. Черноватая/красноватая вещь в верхнем левом углу - это статическое «тепло», тем менее красная вещь - температура от шейдера.

Любая идея, что я делаю неправильно?

ответ

0

Так все о преобразовании системы координат ...

Если у вас есть 512x512 текстуры, то текстура может сэмпл как массив от 0,0 до 511,511, так что если вы хотите, чтобы это масштаб 0,0 до 1,1 вам нужно разделить на 511, а не на 512! Глупая ошибка, но трудно найти ...