我正在使用 C 和 opengl 4.0 制作体素开放世界游戏。我使用本教程实现了级联阴影贴图:https://learnopengl.com/Guest-Articles/2021/CSM
无论我如何设置偏差变量,我都无法摆脱彼得平移。我的影子是这样的:
如您所见,立方体及其阴影之间有细小的间隙。我不想这样。
这就是我设置偏差变量的方式:
float bias = max(0.005f * (1.0f - dot(normal, lightDirection)), 0.00028f);
const float biasModifier = 0.2f;
if(layer==0){
bias *= 1 / (cascade0range * biasModifier);
}
else if(layer==1){
bias *= 1 / (cascade1range * biasModifier);
}
else if(layer==2){
bias *= 1 / (cascade2range * biasModifier);
}
else if(layer==3){
bias *= 1 / (cascade3range * biasModifier);
}
如果您想查看所有代码,这是项目的存储库: https://github.com/SUKRUCIRIS/OPENGL_VOXEL_GSU
我通过在阴影传递期间剔除正面来解决了这个问题。
glCullFace(GL_BACK);
glFrontFace(GL_CW);
然后我在正常渲染时恢复了它
glCullFace(GL_FRONT);
glFrontFace(GL_CCW);