我正在使用 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
}
}
Run Code Online (Sandbox Code Playgroud)
这工作正常。但如果我尝试:
cbuffer LIGHTS_COUNT : register(b13)
{
int LightsCount;
}
Run Code Online (Sandbox Code Playgroud)
要根据游戏中发生的情况使灯的数量发生变化,这是行不通的。我知道我可以LightsCount在应用程序开始时给出一个很大的值并向阵列添加灯光,但我发现这种方法复杂、固定且效率低下。
有谁知道如何解决这个问题?先感谢您。