我正在 XNA 中构建游戏,但这个问题可能适用于大多数 3D 框架。
我的场景包含几个点光源。每盏灯都有一个位置、强度、颜色和半径。它还包含几个可以被点光源照亮的对象。
我已经成功地使用了一个简单的前向渲染器来一次用多达 8 个点光源来照亮这些对象。
不过,我也想尝试一些其他的效果,比如每一帧光线都会慢慢消失的被照亮的物体。
我想使用多通道方法:
- 每个被照亮的对象都有一个纹理和一个光照贴图(一个渲染纹理)
然后,每个帧和每个对象:
- 清除光照贴图(或淡化它)
- 使用衰减等将每个灯光绘制到光照贴图。
- 在像素着色器中使用纹理*光照贴图渲染对象
我的问题与纹理坐标有关。光照贴图应该使用与纹理贴图相同的 UV 贴图,这样当我绘制对象时,颜色为:
tex2D(TextureSampler, uv) * tex2D(LightMapSampler, uv)
或者,换一种说法,我需要在光照贴图像素着色器中计算光照贴图中每个像素的世界位置,以计算其到每个光照的距离。
实现这一点需要什么坐标变换?