c++ - 各种数组操作

标签 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 } }
    };

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

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

最佳答案

我不是 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;

向 vector 添加顶点:

Vertex vert;
myVerts.push_back(vert);

要清除 vector :

myVerts.clear();

从 Vertex 对象数组复制到 vector (将 vector 分配给数组):

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

如果您只想向现有 vector 添加一组新顶点:

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

从另一个顶点 vector 复制到这个 vector 中(将这个赋值给另一个):

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

向这个 vector 添加另一个顶点 vector :

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

如果您绝对坚持使用自己的数组而不是 STL 中可用的数组,那么您最终将需要在自己的动态数组类中模仿这些相同的函数。如果你的数组不需要是动态的(它是一个在编译时已知的固定大小),那么你不一定需要将功能封装在一个类中(尽管它可以用 std::array 来完成),但是使用带有自定义构造函数的自定义 Vertex 结构仍然比将每个元素手写为冗长且难以阅读的一系列 float 更容易。

关于c++ - 各种数组操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21298252/

相关文章:

c++ - SFINAE : Know if a function already exist or no

c++ - 编译和评估 conditional_t 中的错误大小写问题

c++ - 为容器中的不同字符串类型实现编译时 "static-if"逻辑

java - Java 数组排序和搜索

arrays - Matlab,数组矩阵

java - 在无向图中查找路径 BFS - Java

c++ - 是否有任何优化选项可以更改 VS2012 中结构的对齐方式?

algorithm - 翻转两个三角形的边

c# - 在 C# 中创建图形类

javascript - 无法读取未定义的属性长度 - Javascript