我正在尝试使用以下阴影技术,我在NVIDIA网站上阅读它,这似乎是一个很好的技术。我更喜欢它来计算cpu上的阴影卷,因为它似乎更“真实”,我可以使用它来进行软阴影。 :
第一遍:第二遍:
现在,出于某些原因,我想要在片段着色器中执行最后一步。其中之一是我想要考虑阴影的“效果”的距离。在我的游戏中,如果到阻碍物体的距离很小,可以说阴影将非常“严格”如果距离更远,全局照明会更多,阴影更小。这是因为它是纸牌游戏,对于更复杂的“凹”形状,情况并非如此。
但是,我是openGL的新手,我不明白如何做以下任何事情:
如果有人可以帮助我或者给我一些更多的想法,我感谢你们,我现在很难受,而且我缺乏良好的硬件和空闲时间,这使得调试/尝试所有内容的过程非常耗尽。
答案 0 :(得分:2)
第一种方法是使用附加到GL_DEPTH_ATTACHMENT附件的GL_DEPTH_COMPONENT纹理的FBO。
第二种方法是再次使用glCopyTexImage2D和GL_DEPTH_COMPONENT纹理。
FBO是跨平台的,几乎在所有现代OpenGL实现中都可用,你应该可以使用它们。
答案 1 :(得分:0)
你是对的:你需要从深度缓冲区值创建一个2D纹理,以便在第二遍中使用这些值。
关于纹理本身,我认为从32位深度缓冲区复制到8位RGBA将不会使用强制转换来转换数据:对于深度缓冲区的中间范围值(比如0x80000000),你将在你的rgba纹理上获得R,G,B和A的半音:
RGBA[0] = 0x80;
RGBA[1] = 0x80;
RGBA[2] = 0x80;
RGBA[3] = 0x80;
你期望的地方:(演员)
RGBA[0] = 0x80;
RGBA[1] = 0;
RGBA[2] = 0;
RGBA[3] = 0;
因此,对于正确的格式,我不确定,但我建议您不要在复制期间修改它,因为您不希望有转换开销。