我正在尝试将游戏框架中模型的顶点和面转换为与开源物理库ReactPhysics3d一起使用。
我遇到一个问题,其中用于为物理世界创建网格形状的构造函数采用一个const void*
参数,该参数指向顶点数组的开头。物理网格构造函数只期望浮点数组和步幅值,因此我编写了一个函数,该函数将按顺序返回所有浮点值,并且步幅将始终为3 * sizeof(float)
,因为顶点由3个浮动位置(x,y,z)
。
已经阅读了程序员手册,该库指示您创建此网格的方式是为顶点位置设置float[]
,为索引设置int[]
。有没有办法将我的std::vector<float>
转换为纯float[]
?
我尝试使用vector.data()
和&vertices[0]
方法,但是这两种方法都会导致垃圾数据被加载并导致程序崩溃。
在VS2017中使用C ++ 17。
编辑
auto _vertices = mesh->mesh.getVertexValues();
auto _indices = mesh->mesh.getIndexValues();
auto vertices = reinterpret_cast<float*>(_vertices.data());
auto indices = reinterpret_cast<unsigned int*>(_indices.data());
unsigned int numFaces = mesh->mesh.faces.size();
auto polygonFaces = new rp3d::PolygonVertexArray::PolygonFace[numFaces];
rp3d::PolygonVertexArray::PolygonFace * face = polygonFaces;
int lastStride = mesh->mesh.faces.at(0).numIndices;
for (int f = 0; f < numFaces; f++) {
// First vertex of the face in the indices array
face->indexBase = mesh->mesh.faces.at(f).indices.at(0);
// Number of vertices in the face
face->nbVertices = lastStride;
lastStride = mesh->mesh.faces.at(f).numIndices;
face++;
}
// Create the polygon vertex array
auto polygonVertexArray = new rp3d::PolygonVertexArray(mesh->mesh.vertices.size() / 3,
vertices,
3 * sizeof(float),
indices,
sizeof(unsigned int),
numFaces,
polygonFaces,
rp3d::PolygonVertexArray::VertexDataType::VERTEX_FLOAT_TYPE,
rp3d::PolygonVertexArray::IndexDataType::INDEX_INTEGER_TYPE)
;
PolyhedronMesh* phMesh = new rp3d::PolyhedronMesh(polygonVertexArray); // fails here
通过VS Watch查看多边形VertexFace对象,“ mVerticesStart”变量的值为:
0x0cd43548 "Ø\x11?Ø\x11?Ø\x11?ýýýý.’¦¬ const unsigned char *