模式:
/* Model.fbs
namespace Resource.Model;
struct Vec3 {
x:float;
y:float;
z:float;
}
struct Vec2 {
x:float;
y:float;
}
table MeshData {
Position:[Vec3];
Normal:[Vec3];
TexCoords:[Vec2];
Tangent:[Vec3];
Bitangent:[Vec3];
}
table VertexObject {
MData:MeshData;
Indices:[uint];
MatNameHash:uint;
}
table Model {
Name:uint;
Meshes:[VertexObject];
}
root_type Model;
*/建筑:
//....
auto a = builder.CreateVectorOfStructs(Positions);
auto b = builder.CreateVectorOfStructs(Normals);
auto c = builder.CreateVectorOfStructs(TexCoords);
auto d = builder.CreateVectorOfStructs(Tangents);
auto e = builder.CreateVectorOfStructs(Bitangents);
auto f = CreateMeshData(builder, a, b, c, d, e);
auto g = builder.CreateVector<uint32_t>(Indices);
unsigned int h = 1024; //Hash of Name of Material
std::vector<flatbuffers::Offset<VertexObject>> VO;
auto i = CreateVertexObject(builder, f, g, h);
auto i2 = CreateVertexObject(builder, f, g, h);
VO.push_back(i);
VO.push_back(i2);
auto j = builder.CreateVector(VO);
//...装货:
auto test = GetModel(data);
assert(test->Name());
auto name = test->Name();
assert(test->Meshes());
auto FBMeshes = test->Meshes();
for (unsigned int i = 0; i < FBMeshes->size(); i++)
{
assert(FBMeshes->Get(i));
auto FBMeshesIndex = FBMeshes->Get(i);
//assert(FBMeshesIndex->MData());
}当试图在Flatbuffers中调用表向量时,我会遇到访问冲突。包含的是架构和源代码。我认为这与组件如何为MeshData表一起序列化有关,但我无法确定确切的位置。当我尝试运行assert(FBMeshesIndex>MData();它是根-> Vec :Tables()->Get(I)->Vec:Tables())时,会得到错误。
TestBed.exe!平面缓冲区::ReadScalar(const* p)第219行C++符号加载。( TestBed.exe!flatbuffers::Table::GetOptionalFieldOffset(unsigned短字段) 1866行C++符号加载。( TestBed.exe!flatbuffers::Table::GetPointer(unsigned短字段) 1878行C++符号加载。( TestBed.exe!flatbuffers::Table::GetPointer(unsigned短字段) 1885行C++符号加载。已加载TestBed.exe!Resource::Model::VertexObject::MData()行180 C++符号。TestBed.exe!main()行147 C++符号加载。外部代码注释框架
发布于 2018-01-05 23:47:54
代码看起来很好,所以问题可能在代码之外,data是如何从构建到被使用的。
name 1024的值是多少?是FBMeshes->size() 2吗?此外,在访问data之前,您应该在它上运行一个验证器,以查看数据的传递方式是否有任何问题。
https://stackoverflow.com/questions/48120458
复制相似问题