im stuck in creation function should return struct containing pointers pointers. problem don't access data :/
the problem like:
struct openglmodel { struct subm { vec3* positions; vec3* normals; int nbrvertices; int nbrtriangles; int* triangleindices; }; dim_type submodelcount; subm* submodel; } the function constructing model by:
openglmodel createmodel(..model data) { openglmodel model; std::vector<openglmodel::subm>* submodels = new std::vector<openglmodel::subm>; std::vector<vec3>* positions = new std::vector<vec3>; std::vector<vec3>* normals = new std::vector<vec3>; int submodelindex = 0; for(...all vertices...) { ... //extracting positions , normal vectors positions->push_back(pos); normals->push_back(normal); if(positions->size() >= 65536) { submodels->push_back(openglmodel::subm()); submodels->at(submodelindex).positions = positions->data(); submodels->at(submodelindex).normals = normals->data(); std::vector<vec3>* positions = new std::vector<vec3>; std::vector<vec3>* normals = new std::vector<vec3>; submodelindex++; } } ... ... model.submodel = new openglmodel::subm[submodelindex](); for(int i=0; i<submodelindex; i++) { model.submodel[i] = openglmodel::subm(); model.submodel[i].positions = submodels->data()[i].positions; model.submodel[i].normals = submodels->data()[i].normals; } return model; } the submodels containing correct data model.submodel not. how can model access data in vectors? seems wrong in last for-loop..
why you're accessing:
model.submodel[i] when of type:
subm* submodel; you're accessing memory not supposed accessed.
on side note, code overcomplicated , dangerous. can cut of pointers, don't need.
std::vector<openglmodel::subm>* submodels = new std::vector<openglmodel::subm>; std::vector<vec3>* positions = new std::vector<vec3>; std::vector<vec3>* normals = new std::vector<vec3>; becomes
std::vector<openglmodel::subm> submodels; std::vector<vec3> positions; std::vector<vec3> normals; and structure
struct openglmodel { struct subm { vec3 positions; vec3 normals; int nbrvertices; int nbrtriangles; std::vector<int> triangleindices; }; dim_type submodelcount; subm* submodel; } should need reuse existing vectors , not copy them around, can use reference vector , initialize in constructor's initialization list.
Comments
Post a Comment