【发布时间】:2015-12-25 02:16:22
【问题描述】:
我正在使用 C++ 和 Direct3D11 开发游戏引擎,现在我想向场景中添加可变数量的灯光。迄今为止,我设法添加和渲染了一些简单的灯光,这些灯光在着色器程序中已经知道和编码。
在 shader.fx 中:
static const int LightsCount= 4;
struct NF3D_LIGHT
{
// Members...
};
cbuffer Light : register(b5)
{
NF3D_LIGHT light[LightsCount];
};
...
// And the pixel shader function:
float4 PS(PS_INPUT input) : SV_Target
{
for(int i = 0; i < LightsCount; i++)
{
// Process each light and return the final pixel colour
}
}
这很好用。但如果我尝试:
cbuffer LIGHTS_COUNT : register(b13)
{
int LightsCount;
}
让灯光的数量根据游戏中发生的情况而变化,这是行不通的。我知道我可以在应用程序开始时给 LightsCount 一个很大的值并向数组添加灯光,但我发现这种方法复杂、固定且效率不高。
有人知道如何解决这个问题吗?提前谢谢你。
【问题讨论】:
标签: c++ shader hlsl lighting direct3d11