큐브 맵과 그림자 맵핑을 2D 텍스처로 한 방향으로 해봤지만 모든 방향으로 그림자 맵핑을위한 큐브 맵을 사용하면 많은 문제가 발생합니다.무지 향성 그림자 맵
저는 최근에 textureCube()
에서 얻은 깊이 값이 항상 0이라는 것을 알았습니다. 나는 2D 텍스쳐의 환경 맵과 쉐도우 맵핑과 비슷한 코드를 사용하고 있었기 때문에 gDEBugger가 쉐도우 맵이 메모리에 제대로 복사되고 있음을 보여주기 때문에이 라인이 작동한다고 가정했습니다. 여기
합니다 ... else
항상 촬영
uniform samplerCube shadowMap;
varying vec3 worldFragPosition, worldLightPos;
...
vec3 lightToFrag;
float shadowMapDepth;
bool inShadow;
inShadow = false; //used to darken color at the end
if (shadowMapEnabled)
{
lightToFrag = worldFragPosition - worldLightPos;
shadowMapDepth = textureCube(shadowMap, lightToFrag).r;
if (shadowMapDepth > .75)
{
gl_FragColor = vec4(1.0, 0.0, 0.0, 0.0);
return;
}
else if (shadowMapDepth > .5)
{
gl_FragColor = vec4(0.0, 1.0, 0.0, 0.0);
return;
}
else if (shadowMapDepth > .25)
{
gl_FragColor = vec4(0.0, 0.0, 1.0, 0.0);
return;
}
else if (shadowMapDepth > 0.0)
{
gl_FragColor = vec4(1.0, 1.0, 1.0, 0.0);
return;
}
else if (shadowMapDepth < 0.0)
{
gl_FragColor = vec4(1.0, 0.0, 1.0, 0.0);
return;
}
else
{
//... shadow mapping code
}
}
내 디버깅 테스트와 함께 그림자 매핑에 사용되는 쉐이더 코드의 일부 장면은 모든 것이 현재에 그늘이 (깨진 그림자 매핑 코드를 사용하여 렌더링 비교 깊이가 0이므로).
나는 그것이 0이 아닌지를 확인하기 전에 lightToFrag
을 테스트했으며 shadowMapDepth
을 플로트 임에도 불구하고 명시 적으로 테스트했습니다. 나는 또한 그것이 0 벡터가되도록 textureCube(shadowMap, lightToFrag)
의 전체 반환 값을 테스트했습니다.
내가 생각할 수있는 유일한 깊이 텍스처가 제대로 바인더 제본되지 않은,하지만 난 아무것도 잊고 있다고 생각하지 않는 경우가 될 것입니다 항상 0입니다 이유에 ...
samplerShadowMapLoc = glGetUniformLocation(progId, "shadowMap");
shadowMapEnabledLoc = glGetUniformLocation(progId, "shadowMapEnabled");
....
glUniform1i(shadowMapEnabledLoc, true);
glActiveTexture(GL_TEXTURE3);
glBindTexture(GL_TEXTURE_CUBE_MAP, light->getShadowMap()->getShadowMapId());
glUniform1i(samplerShadowMapLoc, 3);
for (unsigned int i=0; i < objects.size(); i++)
if (objects.at(i)->getID() != light->getParent()->getID()) //don't draw light, it doesn't need shadows
render(objects.at(i));
glUniform1i(shadowMapEnabledLoc, false);
render(light->getParent());
glUniform1i(shadowMapEnabledLoc, false);
무엇이 textureCube가 0 벡터를 반환하게할까요? 어떤 도움을 주시면 감사하겠습니다.
어쩌면 [this] (http://http.developer.nvidia.com/GPUGems/gpugems_ch12.html)를보고 도움을 받으려고 시작 했으므로 정말 도움이되지 않습니다 ... – niktehpui