小编fea*_*ped的帖子

D3D11:HLSL 中可变数量的灯

我正在使用 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在应用程序开始时给出一个很大的值并向阵列添加灯光,但我发现这种方法复杂、固定且效率低下。

有谁知道如何解决这个问题?先感谢您。

c++ shader lighting hlsl direct3d11

4
推荐指数
1
解决办法
1332
查看次数

标签 统计

c++ ×1

direct3d11 ×1

hlsl ×1

lighting ×1

shader ×1