将std :: vector <float>转换为float []

时间:2019-05-29 14:36:31

标签: c++

我正在尝试将游戏框架中模型的顶点和面转换为与开源物理库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 *

0 个答案:

没有答案