Amerio.Stephane Posted October 9, 2019 Share Posted October 9, 2019 Hello, I'm following the sample found in the documentation to create a dynamic mesh with a large number of vertices: https://developer.unigine.com/en/docs/2.9/code/usage/dynamic_meshes/index?rlang=cpp#big_number I tried the following code, but it crashes with an out of bound exception. (trying to create a simple hollow cylinder, with 4 vertices on each side and no caps) int AppWorldLogic::init() { mesh = ObjectMeshDynamic::create(); mesh->setWorldTransform(translate(Vec3(0.0f, 0.0f, 2.0f))); mesh->setMaterial("mesh_base", "*"); mesh->allocateVertex(8); mesh->allocateIndices(24); createQuadVertices(vec3(0, 0, 0)); createQuadVertices(vec3(0, 3, 0)); createTube(); // calculate tangent vectors mesh->updateTangents(); // calculate a mesh bounding box mesh->updateBounds(); return 1; } void AppWorldLogic::createQuadVertices(vec3 const& pos) { mesh->addVertex(pos + vec3(0, 0, 1)); mesh->addVertex(pos + vec3(1, 0, 0)); mesh->addVertex(pos + vec3(0, 0, -1)); mesh->addVertex(pos + vec3(-1, 0, 0)); } void AppWorldLogic::createTube() { int i = mesh->getNumVertex() - 4; for (int k=0; k < 4; ++k, ++i) { mesh->addIndex(i); mesh->addIndex(i + 1); mesh->addIndex(i + 1 - 4); mesh->addIndex(i); mesh->addIndex(i + 1 - 4); mesh->addIndex(i - 4); } } I guess I'm missing something, but the code is very similar to the sample, so maybe the sample too miss something? Link to comment
christian.wolf2 Posted October 10, 2019 Share Posted October 10, 2019 Hi Stephane, are you sure you added the right vertex indices to the mesh? For your createTube()-function check, when k ==3. The line mesh->addIndex(i+1) results in adding the index 8, which is not valid, because you only added 8 vertices in the beginning (so range index 0-7). The object didn't check, if your indices are valids or out of bounds. But when using them afterwards. Best, Christian 1 Link to comment
Amerio.Stephane Posted October 10, 2019 Author Share Posted October 10, 2019 Ooooh ! The silliest and oldest of error, forgetting the modulo. Thanks for pointing it out! (and thinking that I put a bunch of log::message in my code and didn't catch it, I feel ashamed..) Thanks Christian! Link to comment
Recommended Posts