[英]Accessing 32-bit Depth Buffer from fragment shader?
我正在尝试进行以下阴影处理技术,我在NVIDIA网站上阅读了它,这似乎是一种不错的技术。 我宁愿选择它来计算cpu上的阴影体积,因为它看起来更“真实”,我可以将其用于软阴影。 :
第一关:
第二遍:
现在,由于某些原因,我想执行片段着色器的最后步骤。 其中之一是我要考虑阴影的“效果”的距离,在我的游戏中,如果到障碍物的距离很小,可以肯定地说阴影将非常“严格”。如果距离较远,全局照明会增加,阴影也会更暗,这是因为它是纸牌游戏,对于更复杂的“凹形”形状则不是这种情况。
但是,我是openGL的新手,但我不知道如何执行以下任一操作:
谢谢您,如果有人可以帮助我或给我更多想法,我现在有点迷惑,而且我缺乏良好的硬件和空闲时间的确使调试/尝试所有工作变得筋疲力尽。
第一种方法是使用在GL_DEPTH_ATTACHMENT附件中附加了GL_DEPTH_COMPONENT纹理的FBO。
第二种方法是再次使用带有GL_DEPTH_COMPONENT纹理的glCopyTexImage2D。
FBO是跨平台的,几乎可以在每个现代OpenGL实现中使用,因此您应该可以使用它们。
没错:您需要根据深度缓冲区值创建2D纹理,以便在第二遍中使用这些值。
关于本身的质感,我觉得从32位深度缓冲区拷贝至8位RGBA不会使用强制转换数据:为深度缓冲的中间范围值(比方说为0x80000000),您将获得R,G半色调, B和A在您的rgba纹理上:
RGBA[0] = 0x80;
RGBA[1] = 0x80;
RGBA[2] = 0x80;
RGBA[3] = 0x80;
您期望的位置:(广播)
RGBA[0] = 0x80;
RGBA[1] = 0;
RGBA[2] = 0;
RGBA[3] = 0;
因此,对于哪种格式正确,我不确定,但是我建议您在复制期间不要修改它,因为您不希望有转换开销。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.