방금 DirectCompute를 배우기 시작했으며 학습 목적으로 텍스처를 흐리게하는 간단한 회선 필터를 만들고 싶습니다. 나는 다음과 같은 매개 변수를 사용하여 전화컨볼 루션 필터가 잘못된 색상 값을 출력합니다.
Texture2D<float4> inputTex;
RWTexture2D<float4> outputTex;
[numthreads(32, 32, 1)]
void main(uint3 DTid : SV_DispatchThreadID)
{
float4 totalPixVal = float4(0.0f, 0.0f, 0.0f, 0.0f);
for (int y = -3; y < 3; ++y)
for (int x = -3; x < 3; ++x)
totalPixVal += inputTex.Load(uint3(DTid.x + x, DTid.y + y, DTid.z));
totalPixVal = float4(totalPixVal.xyz/49.0f, 1.0f);
float4 inPix = inputTex.Load(DTid);
outputTex[DTid.xy] = totalPixVal;
}
:
DeviceContext->Dispatch(inputTexture->Width/32, inputTexture->Height/32, 1);
이 쉐이더는 평균 색 현재 픽셀의 값과 48 개 이웃 소요 나는 질감을 흐리게하기 위해 다음과 같은 연산 쉐이더를 작성했습니다 이는 흐림 효과를 유발합니다.
흐림 부분이 잘 작동하지만 쉐이더가 출력하는 색상이 올바르지 않습니다. 셰이더를 테스트하기 위해 검정색 배경에 순수한 흰색 모양의 간단한 이미지를 사용하고 있습니다. 내가 예상 한 출력은 검정색 배경에 희미한 순수한 흰색 모양이지만 흰색 모양은 더 이상 흰색이 아니므로 회색입니다. 이제는 코드를 여러 번 읽었지만 문제가있는 곳을 찾을 수 없습니다. 각 텍스처의 크기는 512x512 픽셀입니다.
이 내 입력 이미지 :
그리고 이것은 내가 얻을 출력 :
어떤 도움을 크게 감상 할 수있다.
감사합니다 : D
아 그래, 당신 말이 맞아. 고맙습니다! 나는 새로운 계산 쉐이더에 너무 집중했다는 것을 알았습니다. – Krienie