두 개의 삼각형을 결합하여 선분을 그립니다. 삼각형의 각 꼭지점은 다양한 변수 (vec3 vBC)로 고유 한 좌표 집합을 가져옵니다. 그런 다음 프래그먼트 셰이더에서이 변수에 대해 얻은 값은 보간 된 값이며 삼각형 내부의 조각 위치를 나타냅니다. 이 값을 사용하여 조각이 삼각형의 가장자리에서 얼마나 멀리 떨어져 있는지를 결정합니다. 그러면 삼각형의 가장자리에서 앤티 앨리어싱을 수행하는 데 사용됩니다. 나는이 같은 가장자리 BC와 DE에 앤티 앨리어싱을 적용하고 있지 않다 때문이다 사각형 1의 가장자리의 계단이 내부 가장자리 있습니다 OpenGL에서 중심 좌표를 사용하는 앤티 앨리어싱 된 라인
주의 사항 :
은 아래 이미지의 문제를 참조하십시오. 길이 x가 매우 작기 때문에 꼭짓점 C 및 D에 가까운 가장자리 BC 및 DE의 들쭉날쭉 한 가장자리가 표시됩니다. 이 들쭉날쭉 한 가장자리는 길이 x보다 길이가 더 깁니다. 이 두 가장자리 (BC 및 DE)에 앤티 앨리어싱을 적용하면 Rect 2가 표시됩니다. 앤티 앨리어싱 중 스무딩 프로세스는 알파 값 0.0을 가장자리에 있거나 매우 가까운 가장자리에 배치하기 때문에 발생합니다. 따라서 안티 앨리어싱 된 BC와 DE는 내부에 흰색 대각선을 도입합니다.제 질문은 어떻게 제가 Rect 1을 부드럽게 할 수 있을까요?
단편 쉐이더 :
셰이더 코드varying vec4 DestinationColor;
varying vec2 TexCoordOut;
varying vec3 vBC;
uniform sampler2D Texture;
uniform int TexEnabled;
float edgeFactor();
void main() {
if (TexEnabled == 1) {
gl_FragColor = texture2D(Texture, TexCoordOut) * DestinationColor;
} else{
gl_FragColor = vec4(DestinationColor.xyz, edgeFactor());
}
}
float edgeFactor() {
vec3 d = fwidth(vBC);
vec3 a3 = smoothstep(vec3(0.0), d*1.5, vBC);
return a3.y;
};
, a3.y 번째 값을 말한다 (정점 D 또는 C 및 조각 사이의 거리)의 좌표, 즉 (Y)의 세트는 D 1 (0 나타낸다 1,0)이고 첫 번째 0과 두 번째 0은 각각 x와 z를 나타냅니다.
"* Rect 1의 들쭉날쭉 한 모서리에 주목하십시오."아니요. 두 구석에 약간의 얼룩이있는 검은 색 사각형이 보입니다. –
OpenGL에서 가져온 원본 출력이 아닙니다. 나는 방금 들쭉날쭉 한 가장자리의 위치를 보여 주려고했습니다. 그 "얼룩"은 실제로 선 BC와 DE의 날카로운 모서리입니다. BC와 DE – asad
"* OpenGL에서 얻은 원본 출력이 아닙니다. *"그래서 사람들이 실제로 거기에없는 것을 눈치 채기를 어떻게 기대합니까? 당신은 당신이 제공 한 이미지에 표시되지 않는 들쭉날쭉 한 가장자리에 대해 묻고 있습니다. –