这是我的构造函数。
SceneContainer::SceneContainer()
:
m_BVH(Allshapes, 0)
{
ParseJSONDataIntoShapeData("ShapeList.json");
}
这是场景类声明。
class SceneContainer{
public:
void ParseJSONDataIntoShapeData(std::string filename);
private:
BVHNode m_BVH;
std::vector<shape*> Allshapes;
};
所以给定一个像这样的 JSON 文件。
{
"scene": {
"shape": [{
"center": "1.0 1.0 1.0",
"radius": 1,
"_name": "sphere1",
"_type": "sphere"
},
{
"center": "2.0 2.0 2.0",
"radius": 1,
"_name": "sphere2",
"_type": "sphere"
},
{
"center": "3.0 3.0 3.0",
"radius": 1,
"_name": "sphere3",
"_type": "sphere"
},
{
"center": "3.0 3.0 3.0",
"radius": 1,
"_name": "sphere4",
"_type": "sphere"
}]
}
然后 parseJSONDataIntoShapeData 将遍历文件中的所有形状并 push_back 指向在文件中创建的形状的指针。一些伪代码看起来像。
for(all shapes in json file)
Create shape pointer from shape data
push_back shape pointer to AllShapes.
在调用 parseJSONdata 之后,Allshapes 向量中会有四个形状。但是,由于构造函数如何与我的原始实现一起工作,因此 m_BVH 使用空向量进行初始化,因为 ParseJSONData 在 m_BVH 初始化后被调用,而我希望它使用其中的形状数据进行初始化。