전 방향 포인팅 라이트로 작업하고 있습니다. 이미 큐브 맵 텍스쳐를 6 프레임 버퍼의 컬러 첨부 파일로 사용하고 쉐도우 맵핑을 구현했으며 각 픽셀에서 빛과 프래그먼트 사이의 거리를 인코딩했습니다. 이 가능한 경우 깊이 큐브 맵을 사용한 무지 향 그림자 매핑
지금 내 구현이 방법을 변경하려면, 싶습니다- 1) 대신 색상으로, 내 프레임 버퍼의 깊이 버퍼에 깊이 큐브 맵 텍스처를 연결합니다.
- 2) 렌더링 깊이 만이 패스에 색상을 쓰지 마십시오.
- 3) 메인 패스에서 큐브 맵 텍스처의 깊이를 읽고 거리로 변환 한 다음 현재 조각이 가벼운가.
큐브 맵에서 깊이 값을 거리로 변환하면 문제가 발생합니다. 나는 큐브 맵에서 깊이 값을 가져 오기 위해 light-to-fragment 벡터를 사용했다. 이 시점에서, 나는 6 개의 얼굴 중 어느 것이 사용되고 있는지, 2D 텍스처 좌표가 내가 읽고있는 깊이 값과 일치하는지 알지 못합니다. 그렇다면 어떻게 깊이 값을 거리로 변환 할 수 있습니까?
여기 내 코드의 조각을 설명하기 위해 다음과 같습니다
깊이 텍스처 :
glGenTextures(1, &TextureHandle);
glBindTexture(GL_TEXTURE_CUBE_MAP, TextureHandle);
for (int i = 0; i < 6; ++i)
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_DEPTH_COMPONENT,
Width, Height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
프레임 버퍼 건설 :
for (int i = 0; i < 6; ++i)
{
glGenFramebuffers(1, &FBO->FrameBufferID);
glBindFramebuffer(GL_FRAMEBUFFER, FBO->FrameBufferID);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, TextureHandle, 0);
glDrawBuffer(GL_NONE);
}
내가 달성하기 위해 쓰기 위해 노력하고있어 조각 쉐이더의 조각 내 코드 :
float ComputeShadowFactor(samplerCubeShadow ShadowCubeMap, vec3 VertToLightWS)
{
float ShadowVec = texture(ShadowCubeMap, vec4(VertToLightWS, 1.0));
ShadowVec = DepthValueToDistance(ShadowVec);
if (ShadowVec * ShadowVec > dot(VertToLightWS, VertToLightWS))
return 1.0;
return 0.0;
}
DepthValueToDistance 함수가 실제 문제입니다.
"문제가 해결 되었습니까?" 거리를 깊이로 변환하고 큐브 맵에 저장된 깊이와 비교합니다. "큐브 맵 그림자에 적용 할 수 없다"5.7 년 전에는 "ron frazier"라는 누군가가 쉐도우 맵핑을 위해 큐브 맵을 사용하는 방법에 관한 기사를 썼다. – SigTerm
@SigTerm http://www.ronfrazier.net/apparition/index.html?appmain=research/index.html 내가 당신이 말하는 것 같아요. –
@ 존린 셀바 토 : 네. 나는 ** 그것이 ** [this] (http://www.ronfrazier.net/apparition/index.html?appmain=research/index.html) 기사라고 생각합니다. 분명히 현대 OpenGL/더 나은 정밀도 (부동 소수점 텍스처, GLSL,'shadow 'samplers 등)와 비슷한 것을 할 수 있습니다. - 나는 단지 근처에 일하는 발췌 문장이 없으며, 하나의 글을 쓰고 싶지 않습니다. . – SigTerm