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