Различные операции с массивами

Я делаю класс, и одним из его значений являются все вершины, из которых он состоит (это 3d-программа). Я также хочу иметь массив вершин по умолчанию (поскольку вершины достаточно велики для ввода), и я хочу сделать это, чтобы определить массив вершин:

    Entity::vertices[] = {
{ -0.5f, 0.5f, 0.0f, { 0.0f, 0.0f, 0.0f, 0.0f } },
{ 0.5f, 0.5f, 0.0f, { 0.0f, 0.0f, 0.0f, 0.0f } },
{ 0.5f, -0.5f, 0.0f, { 0.0f, 0.0f, 0.0f, 0.0f } },
{ 0.5f, -0.5f, 0.0f, { 0.0f, 0.0f, 0.0f, 0.0f } },
{ -0.5f, -0.5f, 0.0f, { 0.0f, 0.0f, 0.0f, 0.0f } },
{ -0.5f, 0.5f, 0.0f, { 0.0f, 0.0f, 0.0f, 0.0f } }
};

а затем в конструкторе класса проверьте, были ли введены пользовательские вершины, и если это так, сделайте массив вершин входным массивом.

Есть ли функция копирования массива?
Если нет, то как очистить массив(Очистит существующие вершины по умолчанию, потому что, если введенные вершины меньше, чем по умолчанию, у меня будут дополнительные вершины, которые будут плохими для рендеринга)?

0

Решение

Я не уверен на 100%, какие данные вы пытаетесь сохранить в своем массиве, но вот упрощенный пример того, как я храню данные вершин в созданных мной играх.

struct Vertex
{
vec3 pos;
vec3 nrm;
vec2 uvs;  // Can replace this with D3DCOLOR for example if you want colors instead of texture samples.
};

Чтобы сохранить их в std :: vector, создайте вектор:

std::vector<Vertex> myVerts;

Чтобы добавить верты в вектор:

Vertex vert;
myVerts.push_back(vert);

Чтобы очистить вектор:

myVerts.clear();

Чтобы скопировать из массива объектов Vertex вектор (назначьте вектор массиву):

// assuming: Vertex otherVerts[] = { ... };
myVerts.assign(otherVerts,otherVerts+otherSize);

Если вы просто хотите добавить массив новых вершин в существующий вектор:

// assuming: Vertex otherVerts[] = { ... };
myVerts.insert(myVerts.end(),otherVerts,otherVerts+size);

Чтобы скопировать другой вектор вершин в этот (назначив этот другой):

// assuming: std::vector<Vertex> otherVerts(...);
myVerts = otherVerts;

Чтобы добавить еще один вектор вершин к этому:

// assuming: std::vector<Vertex> otherVerts(...);
myVerts.insert(myVerts.end(),otherVerts.begin(),otherVerts.end());

Если вы абсолютно настаиваете на использовании своих собственных массивов вместо того, что доступно в STL, то в конечном итоге вам нужно будет имитировать эти же функции в вашем собственном классе динамических массивов. Если ваш массив не должен быть динамическим (это фиксированный размер, который известен во время компиляции), то вам не обязательно инкапсулировать функциональность в классе (хотя это можно сделать с помощью std :: array), но все же проще использовать пользовательскую структуру Vertex с пользовательскими конструкторами, чем писать каждый элемент вручную как длинный и сложный для чтения серий чисел с плавающей запятой.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]