문제

uniform sampler2D sampler0;
uniform vec2 tc_offset[9];
void blur()
{
  vec4 sample[9];
  for(int i = 0; i < 9; ++i)
    sample[i] = texture2D(sampler0, gl_TexCoord[0].st + tc_offset[i]);

  gl_FragColor = (sample[0] + (2.0 * sample[1]) + sample[2] +
      (2.0 * sample[3]) + sample[4] + 2.0 * sample[5] +
      sample[6] + 2.0 * sample[7] + sample[8] ) / 13.0;
}

샘플 [i] = texture2d (sample0, ...) 라인은 어떻게 작동합니까?

이미지를 흐리게하는 것 같습니다. 먼저 이미지를 생성해야하지만 여기서는 내가 생성하는 매우 iamge를 쿼리하려고 노력하고 있습니다. 이것은 어떻게 작동합니까?

도움이 되었습니까?

해결책

알다시피, 흐릿한 이미지를 만들려면 먼저 이미지를 만들고 흐리게해야합니다. 이 셰이더는 두 번째 단계를 수행하여 이전에 생성 된 이미지를 취하고 흐리게합니다. 원래의 뇌가없는 이미지를 생성하려면 다른 곳에서 추가 코드가 필요합니다.

다른 팁

이미지에 블러 커널을 적용합니다. tc_offset 실제 텍스처 좌표 주위에 3x3 영역의 샘플링 지점을 형성하려면 응용 프로그램에 의해 올바르게 초기화되어야합니다.

0   0   0
0   x   0
0   0   0

(X가 원래 좌표라고 가정합니다). 왼쪽 상단 샘플링 포인트의 오프셋이 될 것입니다 -1/width,-1/height. 중앙 지점의 오프셋은 Texel Center (Off-By-By-5 문제)에 조심스럽게 정렬되어야합니다. 또한 하드웨어 이중선 필터를 사용하여 블러의 양을 늘리면 텍셀 사이의 샘플링을 통해 흐림의 양을 늘릴 수 있습니다.

나머지 셰이더는 샘플을 거리로 스케일링합니다. 일반적으로 이것은 미리 계산됩니다.

for(int i = 0; i < NUM_SAMPLES; ++i) {
    result += texture2D(sampler,texcoord+offsetscaling[i].xy)*offsetscaling[i].z;
}

한 가지 방법은 원래 이미지를 생성하여 화면이 아닌 질감으로 렌더링하는 것입니다. 그런 다음이 셰이더를 사용하여 전체 화면 쿼드를 그립니다.이 셰이더와 텍스처가 이미지를 사후 처리하기 위해 입력 할 때 텍스처를 그립니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top