현재 SFL을 사용하여 glsl에 간단한 외곽선 쉐이더를 쓰려고합니다. 나는 쉐이더 프로그래밍에 익숙하지 않으므로 그 질문이 명백하다면 나를 용서해주십시오. 어쨌든 셰이더는 텍스처 내에서 가장자리를 감지하는 데는 문제가 없지만 텍스처 가장자리에서는 경계선을 감지하지 못합니다. 윤곽 셰이더의 작업 프래그먼트가 텍스처 가장자리에 있는지 확인하는 방법
outlineShader 사진의
내 조각 쉐이더의 코드 제대로 작동하지
uniform sampler2D texture;
uniform float outlineThickness;
uniform vec2 textureSize;
uniform vec3 outlineColor;
void main()
{
vec2 offx = vec2(outlineThickness/textureSize.x, 0.0);
vec2 offy = vec2(0.0, outlineThickness/textureSize.y);
float surroundingAlphaSum = texture2D(texture, gl_TexCoord[0].xy + offx).a +
texture2D(texture, gl_TexCoord[0].xy - offx).a +
texture2D(texture, gl_TexCoord[0].xy + offy).a +
texture2D(texture, gl_TexCoord[0].xy - offy).a;
// This pixel
vec4 pixel = texture2D(texture, gl_TexCoord[0].xy);
// If one of the surrounding pixels is transparrent --> an edge is detected
if (4.0 * pixel.a - surroundingAlphaSum > 0.0)
pixel = vec4(outlineColor, 1.0);
else
pixel = vec4(0.0); // transparrent
gl_FragColor = pixel * gl_Color;
}
(난 단지 조각 쉐이더가)
근본적으로 내가 찾고있는 것은 이웃 픽셀이 여전히 텍스처에 속해 있는지 여부를 결정하는 방법입니다.
BTW : gl_TexCoord[0].xy
은 shadermodel #version 120
이후에 양보 된 것처럼 보입니다. 대안은 많이 감사하겠습니다. 당신의 도움을
감사합니다,
애드리안
네, 저의 첫 번째 시도였습니다. 나는 더 큰 (transparrent) 렌더 텍스처를 먼저 그린 다음 renderTexture에 그 쉐이더를 적용함으로써 해결 방법을 발견했다. 가장자리가 더 이상 텍스처의 가장자리에 있지 않지만 탱크 성능이 상당히 느려지므로 작동합니다. 답변 해 주셔서 고맙습니다 ^^ –