bool Bundle3D::loadMeshData(const std::string& id, MeshData* meshdata) { meshdata->resetData(); assert(_document.HasMember("mesh")); const rapidjson::Value& mash_data_array = _document["mesh"]; assert(mash_data_array.IsArray()); const rapidjson::Value& mash_data_val = mash_data_array[(rapidjson::SizeType)0]; assert(mash_data_val.HasMember("body")); const rapidjson::Value& mesh_data_body_array = mash_data_val["body"]; assert(mesh_data_body_array.IsArray()); const rapidjson::Value& mesh_data_body_array_0 = mesh_data_body_array[(rapidjson::SizeType)0]; // vertex_size assert(mesh_data_body_array_0.HasMember("vertexsize")); meshdata->vertexSizeInFloat = mesh_data_body_array_0["vertexsize"].GetInt(); // vertices meshdata->vertex.resize(meshdata->vertexSizeInFloat); const rapidjson::Value& mesh_data_body_vertices = mesh_data_body_array_0["vertices"]; for (rapidjson::SizeType i = 0; i < mesh_data_body_vertices.Size(); i++) meshdata->vertex[i] = mesh_data_body_vertices[i].GetDouble(); // index_number meshdata->numIndex = mesh_data_body_array_0["indexnum"].GetUint(); // indices meshdata->indices.resize(meshdata->numIndex); const rapidjson::Value& mesh_data_body_indices_val = mesh_data_body_array_0["indices"]; for (rapidjson::SizeType i = 0; i < mesh_data_body_indices_val.Size(); i++) meshdata->indices[i] = (unsigned short)mesh_data_body_indices_val[i].GetUint(); // mesh_vertex_attribute const rapidjson::Value& mesh_vertex_attribute = mash_data_val["attributes"]; meshdata->attribCount = mesh_vertex_attribute.Size(); meshdata->attribs.resize(meshdata->attribCount); for (rapidjson::SizeType i = 0; i < mesh_vertex_attribute.Size(); i++) { const rapidjson::Value& mesh_vertex_attribute_val = mesh_vertex_attribute[i]; meshdata->attribs[i].size = mesh_vertex_attribute_val["size"].GetUint(); meshdata->attribs[i].attribSizeBytes = meshdata->attribs[i].size * parseGLTypeSize(mesh_vertex_attribute_val["type"].GetString()); meshdata->attribs[i].type = parseGLType(mesh_vertex_attribute_val["type"].GetString()); meshdata->attribs[i].vertexAttrib = parseGLProgramAttribute(mesh_vertex_attribute_val["attribute"].GetString()); } return true; }
bool Bundle3D::loadMeshDataJson(MeshData* meshdata) { meshdata->resetData(); assert(_jsonReader.HasMember(MESHDATA_MESH)); const rapidjson::Value& mash_data_array = _jsonReader[MESHDATA_MESH]; assert(mash_data_array.IsArray()); const rapidjson::Value& mash_data_val = mash_data_array[(rapidjson::SizeType)0]; assert(mash_data_val.HasMember(MESHDATA_DEFAULTPART)); const rapidjson::Value& mesh_data_body_array = mash_data_val[MESHDATA_DEFAULTPART]; assert(mesh_data_body_array.IsArray()); const rapidjson::Value& mesh_data_body_array_0 = mesh_data_body_array[(rapidjson::SizeType)0]; // vertex_size assert(mesh_data_body_array_0.HasMember(MESHDATA_VERTEXSIZE)); meshdata->vertexSizeInFloat = mesh_data_body_array_0[MESHDATA_VERTEXSIZE].GetInt(); // vertices meshdata->vertex.resize(meshdata->vertexSizeInFloat); const rapidjson::Value& mesh_data_body_vertices = mesh_data_body_array_0[MESHDATA_VERTICES]; for (rapidjson::SizeType i = 0; i < mesh_data_body_vertices.Size(); i++) meshdata->vertex[i] = mesh_data_body_vertices[i].GetDouble(); // index_number meshdata->numIndex = mesh_data_body_array_0[MESHDATA_INDEXNUM].GetUint(); // indices meshdata->indices.resize(meshdata->numIndex); const rapidjson::Value& mesh_data_body_indices_val = mesh_data_body_array_0[MESHDATA_INDICES]; for (rapidjson::SizeType i = 0; i < mesh_data_body_indices_val.Size(); i++) meshdata->indices[i] = (unsigned short)mesh_data_body_indices_val[i].GetUint(); // mesh_vertex_attribute const rapidjson::Value& mesh_vertex_attribute = mash_data_val[MESHDATA_ATTRIBUTES]; meshdata->attribCount = mesh_vertex_attribute.Size(); meshdata->attribs.resize(meshdata->attribCount); for (rapidjson::SizeType i = 0; i < mesh_vertex_attribute.Size(); i++) { const rapidjson::Value& mesh_vertex_attribute_val = mesh_vertex_attribute[i]; meshdata->attribs[i].size = mesh_vertex_attribute_val[MESHDATA_SIZE].GetUint(); meshdata->attribs[i].attribSizeBytes = meshdata->attribs[i].size * 4; meshdata->attribs[i].type = parseGLType(mesh_vertex_attribute_val[MESHDATA_TYPE].GetString()); meshdata->attribs[i].vertexAttrib = parseGLProgramAttribute(mesh_vertex_attribute_val[MESHDATA_ATTRIBUTE].GetString()); } return true; }