我正在努力寻找一种正确快速的方法来实现游戏引擎中的动态光,但有一些问题(我希望我的解释足够好,因为我不是英语母语)。
问题是:
我需要一种存储向量数组的方法(每个向量有4个浮点)
在堆栈上
因此,编译器可以通过sizeof运算符识别其大小,我可以轻松访问数据,最简单的方法是:
PointLight pointLights[NR_POINT_LIGHTS];
但我想在NR\u POINT\u处添加灯光,因此随着我添加更多灯光,NR\u POINT\u灯光可能会增加,但当然,NR\u POINT\u灯光必须是静态常数(我猜),我有一个这样的函数:
class LightSystem{
void BakeMyLights()
{
struct
{
//PointLight pointLights[nooflights];//Sorry not possible since nooflights isn't const
//PointLight pointLights[(const int)nooflights]; //Also fails as nooflights isn't a real constant "you can change it with func parameter
//std::anycontainer<PointLight> pointLights; // Sizeof operator gives size of the internal pointer which isn't required also it is required to be on stack
}ubo;
MyLovely_OpenGL_And_DirectX_UBO.Update(&ubo,sizeof(ubo));
}
private:
int nooflights;
};
我已经使用了一段时间(我想替换的旧代码)。。。
struct SHADERUBO_t {
// 4 float = 4x4 = 16 byte
Math::Vector4 camPosandMaterialshininess;
// 3 vector4 = 3x16 = 48 byte
_PointLight pointLights[4];
}ShaderUBO; //16 + 48 = 64
MyLovely_OpenGL_And_DirectX_UBO.Update(&ShaderUBO,sizeof(ShaderUBO));
// ^^^^^^^^^ , ^^>>> Gets correct Size 64
// ShaderUBO allocated on stack so Opengl access its data correctly
这个问题
有没有正确的方法来实现它,以便每次“烘焙”系统时,我都可以创建一个包含静态数组的结构,该数组存储在堆栈上并保持其活动状态???
此外,上面显示的所有代码都是伪代码,而不是实际实现。
谢谢