我正在探索一些GLSL并且有一些我想尝试实现的东西。情况如下:
我有一个先前渲染的纹理,它只存储片段的世界空间坐标(rgb = xyz)。这个纹理被传递给另一个渲染过程,是否可以采用世界位置纹理并对其进行采样以测试当前的碎片。世界空间坐标,看看它们是否匹配?
一个例子可能是2个摄像头,测试是否可以通过摄像头B看到摄像头A渲染到纹理的3D空间中的任何点。
此外,是否可以在几个不同的着色器之间修改纹理?即让相机渲染纹理,然后将该纹理传递给另一个着色器并更改它?
非常感谢任何帮助,谢谢:)
答案 0 :(得分:1)
我有一个先前渲染的纹理,它只存储片段的世界空间坐标(rgb = xyz)。这个纹理被传递给另一个渲染过程,是否可以采用世界位置纹理并对其进行采样以测试当前的碎片。世界空间坐标,看看它们是否匹配?
一个例子可能是2个摄像头,测试是否可以通过摄像头B看到摄像头A渲染到纹理的3D空间中的任何点。
是的,有可能。这实际上是一个阴影贴图,但现在您必须在采样期间手动计算距离。目前还不清楚为什么你坚持存储世界空间XYZ坐标以及它的用例是什么。将深度存储在深度纹理中并使用内置的深度纹理查找应该更加简单和高效。
此外,是否可以在几个不同的着色器之间修改纹理?即让相机渲染纹理,然后将该纹理传递给另一个着色器并更改它?
是。您可以渲染纹理,然后在另一个着色器中使用imageLoad
和imageStore
(以及相关的API)来修改它。但是,您必须小心使用反馈循环。由于GPU的并行性质以及它们的缓存 - 非相干体系结构,它可能很复杂,详细的答案将取决于您尝试实现的确切内容。