문제

좋아, 내 GLSL 조각 셰이더에서 나는 공간의 특정 선에서 조각의 거리를 계산할 수 있기를 원한다.

이것의 결과는 처음으로 내 정점 셰이더에 다양한 VEC2를 사용하여 gl_FragCoord:

varying vec2 fake_frag_coord;
//in vertex shader:
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
fake_frag_coord=(gl_ModelViewProjectionMatrix * gl_Vertex).xy;

이제 조각 셰이더에서 다음을 기대합니다.

gl_FragCoord.xy==fake_frag_coord

그러나 그렇지 않습니다. 파이프 라인은 어떤 작업을 수행합니까? gl_Position 그것을 바꾸려면 gl_FragCoord 내가 할 일을 소홀히하고있다 fake_frag_coord?

도움이 되었습니까?

해결책

GL_FRAGCOORD는 화면 좌표이므로 화면 크기에 대한 정보가 있어야합니다. 당신이 생성 한 가짜_frag_coord는 내가 생각하는 정규화 된 장치 좌표 (-1 ~ 1)의 화면의 점에 해당합니다. 따라서 특정 차원에서 화면 크기의 절반을 곱한 다음 해당 크기를 추가하면 실제 화면 픽셀이 나타납니다.

다른 팁

당신이 가진 문제는 셰이더로 계산 된 GL_MODELVIEWPROEDINGTAMIX * GL_VERTEX가 항상 고정 된 기능 파이프 라인이 생성하는 것은 아니라는 것입니다. 동일한 결과를 얻으려면 fake_frag_coord = ftransform ()을 수행하십시오.

편집하다:

그런 다음 화면 치수로 확장하십시오.

나는 더 많은 담당자가 있었으면 좋겠다. 여기 내가 아는 것입니다. OpenGL은 귀하를 위해 자동으로 Divide-By-W를 수행하므로 Position이 Fragment Shad CPU 측에서 동일한 수학을하고 동일한 결과를 얻고 싶거나 이상한 이유가 있다면 Vertex 셰이더 내에서 NDC 좌표를 받고 싶었습니다.

varying vec2 fake_frag_coord;
//in vertex shader:

fake_frag_coord=(gl_ModelViewMatrix * gl_Vertex).xy
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top