正确分配std :: vector

时间:2019-03-21 22:43:56

标签: c++ opengl

我将std :: vector分配给另一个类时遇到问题。我将数据放入std :: vector并将其放入名为“ Mesh”的类中。然后,“网格”变成了“模型”。

// Store the vertices
std::vector<float> positionVertices;

positionVertices.push_back(-0.5f);
positionVertices.push_back(-0.5f);
positionVertices.push_back( 0.5f);
positionVertices.push_back(-0.5f);
positionVertices.push_back(-0.5f);
positionVertices.push_back( 0.5f);

// Put them into a mesh and the mesh into a model
Mesh mesh = Mesh(positionVertices);
Model model = Model(mesh);

在模型类中,我取回网格的位置顶点并将其转换为float []。但是似乎这样,我分配std :: vector的方式是错误的,因为在检查模型类中的std :: vector时,它的大小为0。

// Store the vertices
float* dataPtr = &data[0];
glBufferData(GL_ARRAY_BUFFER, data.size() * sizeof(float), dataPtr, GL_STATIC_DRAW);

如何将数据正确地带入其他类别?

我也不确定网格类的构造函数的工作方式。 Mesh.h:

// Mesh.h
class Mesh
{
public:
    std::vector<float> positionVertices;

    Mesh(std::vector<float>);
    ~Mesh();
};

Mesh.cpp:

// Mesh.cpp
Mesh::Mesh(std::vector<float> positionVertices) : positionVertices(Mesh::positionVertices)
{
}

Model.h:

// Model.h
class Model
{  
public:
Mesh mesh;
unsigned int vertexArray;
unsigned int vertexCount;

Model(Mesh);
~Model();

void storeData(std::vector<float> data, const unsigned int index, const unsigned int size);
};

Model.cpp:

// Model.cpp
Model::Model(Mesh mesh) : mesh(Model::mesh)
{ ... }

1 个答案:

答案 0 :(得分:1)

// Mesh.cpp
Mesh::Mesh(std::vector<float> positionVertices) :
positionVertices(Mesh::positionVertices) // Here's the problem
{
}

初始化器列表中的positionVertices Mesh::positionVertices,因此您将其分配给自己。

使用

positionVertices(positionVertices)

还要更改

Mesh::Mesh(std::vector<float> positionVertices) :

Mesh::Mesh(const std::vector<float>& positionVertices) :

因此,您不必复制不必要的向量。