我正在使用WebGL开发3D引擎,我正在尝试实现阴影。我的逻辑如下:
第一次渲染场景时,我遍历所有网格并创建和编译着色器程序(顶点和片段着色器)。我每个网格只有一个着色器程序,因此,当创建着色器时,我需要知道具有场景的光源,网格的材质和其他注意事项。
创建着色器后,我将其附加到网格对象并渲染对象。在下一次迭代中,不会创建着色器(因为它是先前创建的)。
我听说过阴影贴图。为了实现它,我需要渲染纹理并计算光和当前片段之间的距离以及每个光源的距离。所以,如果我有2个灯,我需要两次执行此过程,然后将这些纹理传递给渲染场景的着色器。
问题是我可以创建100个ligths如果我想要,我需要渲染100个纹理并将其传递给渲染场景的着色器,但OpenGL和WebGL具有有限的单位纹理,所以我无法绑定所有纹理都可以渲染完整的场景。
如何使用任意数量的灯光实现阴影贴图?