다른 쉐이더 스테이지 사이의 수학을 이해하는 데 어려움이 있습니다. 난 기본적으로 색상shadowmapping opengl glsl shader graphics math
#version 330
out vec4 shader_fragmentColor;
void main()
{
shader_fragmentColor = vec4(gl_FragCoord.z, gl_FragCoord.z, gl_FragCoord.z, 1);
//shader_fragmentColor = vec4(1, 0.5, 0.5, 1);
}
은 모두 화이트 색상의 장면을 표시 위의 쉐이더를 사용하여 장면을 렌더링 RGB하는 fragDepth을 작성하는 등의 관점에서 프레 그먼트 쉐이더에서
. gl_FragCoord.z가 1보다 큽니다. 왜냐하면 잘하면 1에서 끝나지 않았지만 지금은 그 질문을 남겨 둘 수 있습니다.카메라의 관점에서 보았을 때 기본적으로 모든 점을 쿼드로 바꾸고 lightTexture에서 룩업 할 가능성이있는 "잘못된"텍스처 위치를 씁니다. 여기에 수학이 질문입니다. 보간 값이 다음 쉐이더 단계에서 정확할 지에 대해서는 약간 확신 할 수 없습니다. 내가 조명 perspecive과 동일한 색상을 쓰기로 표시 될지 색입니다 lightTexture에 조회 basicly 카메라의 관점에서 프래그먼트 쉐이더
#version 330
#extension GL_EXT_geometry_shader4 : enable
uniform mat4 p1_modelM;
uniform mat4 p1_cameraPV;
uniform mat4 p1_lightPV;
out vec4 shader_lightTexturePosition;
void main()
{
float s = 10.00;
vec4 llCorner = vec4(-s, -s, 0.0, 0.0);
vec4 llWorldPosition = ((p1_modelM * llCorner) + gl_in[0].gl_Position);
gl_Position = p1_cameraPV * llWorldPosition;
shader_lightTexturePosition = p1_lightPV * llWorldPosition;
EmitVertex();
vec4 rlCorner = vec4(+s, -s, 0.0, 0.0);
vec4 rlWorldPosition = ((p1_modelM * rlCorner) + gl_in[0].gl_Position);
gl_Position = p1_cameraPV * rlWorldPosition;
shader_lightTexturePosition = p1_lightPV * rlWorldPosition;
EmitVertex();
vec4 luCorner = vec4(-s, +s, 0.0, 0.0);
vec4 luWorldPosition = ((p1_modelM * luCorner) + gl_in[0].gl_Position);
gl_Position = p1_cameraPV * luWorldPosition;
shader_lightTexturePosition = p1_lightPV * luWorldPosition;
EmitVertex();
vec4 ruCorner = vec4(+s, +s, 0.0, 0.0);
vec4 ruWorldPosition = ((p1_modelM * ruCorner) + gl_in[0].gl_Position);
gl_Position = p1_cameraPV * ruWorldPosition;
shader_lightTexturePosition = p1_lightPV * ruWorldPosition;
EmitVertex();
EndPrimitive();
}
.
카메라의 관점에서 렌더링 할 때 장면이 그려지는 것처럼 보이지만 반복되는 장면에 대해 잘못된 텍스처 좌표가 적용됩니다. 텍스쳐를 반복하는 것은 텍스처 좌표가 0에서 1의 경계를 벗어난 것에서 비롯된 것 같습니다.
여러 가지 시도를했지만 여전히 수학이 무엇인지 이해하지 못했습니다. 몇 가지 주석 처리 된 코드와 확실하지 않은 예는 다음과 같습니다.
shader_lightTexturePosition = normalize(p1_lightPV * llWorldPosition)/2 + vec4(0.5, 0.5, 0.5, 0.5);
왼쪽 하단 모서리입니다. 다른 모서리에 similair 코드
솔루션에서 나는 장면이 조명 관점에서와 정확히 같은 색상으로 카메라의 관점에서 렌더링 될 것으로 기대합니다. 아마도 약간의 정밀 오차가있을 수 있습니다.