gpt4 book ai didi

c++ - 各种数组操作

转载 作者:行者123 更新时间:2023-11-28 00:34:57 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com