各种阵列操作

时间:2014-01-23 02:35:15

标签: c++ arrays vertices

我正在创建一个类,它所拥有的一个值是由它组成的所有顶点(它是一个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 } }
    };

然后在类的构造函数中检查是否已输入自定义顶点,如果是,则使顶点数组成为输入数组。

是否有复制数组功能?
如果不是如何清除数组(将清除现有的默认顶点,因为如果输入的顶点小于默认值,我将有额外的顶点,这对渲染不利)

1 个答案:

答案 0 :(得分:3)

我不是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中,请创建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完成),但是使用自定义构造函数的自定义顶点结构比将手写每个元素作为一个冗长且难以阅读的浮点数系列更容易。