gpt4 book ai didi

c++ - 为 OpenGL 正确初始化结构数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:24:01 24 4
gpt4 key购买 nike

我想在两个数组中存储一些Vertex-Data,一个用于static,另一个应该是dynamic

第一个数组将包含位置数据,这不会改变,但第二个数组将包含纹理坐标(我使用纹理图集) .它们可能会在运行时发生变化。


假设我有两个结构:

typedef struct _vertexStatic
{
GLfloat position[2];
} vertexStatic;

typedef struct _vertexDynamic
{
GLfloat texCoords[2];
} vertexDynamic;

我声明了我的两个数组,我想初始化它们以进行测试。

//Static (position)
//Four vertices that form one quad in the end
const vertexStatic m_StaticVertexData[4] =
{
{-0.5f, 0.5f},
{0.5f, 0.5f},
{0.5f, -0.5f},
{-0.5f, -0.5f}
};

//Dynamic (texture coordinates)
vertexDynamic m_DynamicVertexData[4] =
{
{0.2f, 0.0f},
{0.3f, 0.0f},
{0.3f, 0.1f},
{0.2f, 0.1f}
};

const GLubyte m_indices[6] =
{
?, ?, ?,
?, ?, ?
};

这个初始化是不正确的。我得到一些 array must be initialized with a brace-enclosed initializertoo many initializers for 'const vertexStatic {aka const _vertexStatic}编译时出错。


我的问题:

我如何正确初始化顶点数据以及它如何查找大量元素?

最佳答案

你的代码看起来有点像 C 代码,但是因为你用 c++ 标记了它,我猜你正在使用 c++ 编译器。如果是这样,您应该注意到结构与类没有什么不同,除了它的所有成员在默认情况下都是公开的。

也就是说,更明显的是,您不能使用初始化列表来初始化 stuct——它实际上是一个类——这就是您使用 { 实际执行的操作。 .. 代码),除非你创建了一个合适的构造函数,它接受一个初始化列表。

因此您已经创建了一个 initializer_list 构造函数来使其工作。然而,这有点容易出错,因为您可以根据需要使用任意数量的 double 来初始化它:

struct vertexStatic {
GLfloat position[2];
vertexStatic(std::initializer_list<double> l) {
int i = 0;
for(double d : l) {
position[i] = d;
i++;
if(i>1) break; // this is a bit hacky, maybe you should
// raise an exception if there are more than
// two doubles in the init list
}
}
};

另一种方法是只使用 typedef,但是它会隐藏您正在处理数组类型:

typedef GLfloat vertexStatic[2];

第三种——我认为最好的方法是为结构引入一个普通的构造函数并在初始化时调用它们:

struct vertexStatic {
GLfloat position[2];
vertexStatic(GLfloat a, GLfloat b) {
position[0] = a;
position[1] = b;
}
}
// ...
const vertexStatic m_StaticVertexData[4] =
{
vertexStatic(-0.5f, 0.5f),
vertexStatic(0.5f, 0.5f),
vertexStatic(0.5f, -0.5f),
vertexStatic(-0.5f, -0.5f)
};

关于c++ - 为 OpenGL 正确初始化结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21929092/

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