Правильное распределение для std :: vector - PullRequest
0 голосов
/ 22 марта 2019

У меня проблема с передачей моего 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);

В классе модели я беру вершины положения меша и преобразую его в число с плавающей точкой []. Но похоже, что способ размещения 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. 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 Ответ

1 голос
/ 22 марта 2019
// 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) :

так что вы не делаете ненужных копий своего вектора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...