C++ 初始化C+中的glfloat多维数组+;
关于如何正确地逐行初始化GLFloats数组,我现在脑子里有一个结。 据我所知,数组可以这样写:C++ 初始化C+中的glfloat多维数组+;,c++,arrays,multidimensional-array,C++,Arrays,Multidimensional Array,关于如何正确地逐行初始化GLFloats数组,我现在脑子里有一个结。 据我所知,数组可以这样写: int a[2][2] = {{1,2},{3,4}} for(iii = 0; iii <= 9; iii++) { targetVertices[iii] = { /*Side 1*/ targetX[iii]-1, targetY[iii]-1, targetZ[iii]-1,
int a[2][2] = {{1,2},{3,4}}
for(iii = 0; iii <= 9; iii++) {
targetVertices[iii] = { /*Side 1*/
targetX[iii]-1, targetY[iii]-1, targetZ[iii]-1,
targetX[iii]-1, targetY[iii]-1, targetZ[iii]+1,
targetX[iii]-1, targetY[iii]+1, targetZ[iii]+1,
targetX[iii]-1, targetY[iii]+1, targetZ[iii]-1,
/*Side 2*/
targetX[iii]+1, targetY[iii]-1, targetZ[iii]-1,
targetX[iii]+1, targetY[iii]-1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]+1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]+1, targetZ[iii]-1,
/*Side 3*/
targetX[iii]-1, targetY[iii]-1, targetZ[iii]-1,
targetX[iii]-1, targetY[iii]-1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]-1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]-1, targetZ[iii]-1,
/*Side 4*/
targetX[iii]-1, targetY[iii]+1, targetZ[iii]-1,
targetX[iii]-1, targetY[iii]+1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]+1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]+1, targetZ[iii]-1,
/*Side 5*/
targetX[iii]-1, targetY[iii]-1, targetZ[iii]-1,
targetX[iii]-1, targetY[iii]+1, targetZ[iii]-1,
targetX[iii]+1, targetY[iii]+1, targetZ[iii]-1,
targetX[iii]+1, targetY[iii]-1, targetZ[iii]-1,
/*Side 6*/
targetX[iii]-1, targetY[iii]-1, targetZ[iii]+1,
targetX[iii]-1, targetY[iii]+1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]+1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]-1, targetZ[iii]+1
};
}
glBufferData(GL_ARRAY_BUFFER,
data.size()*sizeof(GLfloat),
&data[0],
GL_STREAM_DRAW);
在我的例子中,我有数组
GLfloat targetVertices[10][72];
用于立方体六个边的顶点(确切地说是十个立方体)。立方体坐标存储在
float targetX[10], targetY[10], targetZ[10];
数组。我想这样初始化它:
int a[2][2] = {{1,2},{3,4}}
for(iii = 0; iii <= 9; iii++) {
targetVertices[iii] = { /*Side 1*/
targetX[iii]-1, targetY[iii]-1, targetZ[iii]-1,
targetX[iii]-1, targetY[iii]-1, targetZ[iii]+1,
targetX[iii]-1, targetY[iii]+1, targetZ[iii]+1,
targetX[iii]-1, targetY[iii]+1, targetZ[iii]-1,
/*Side 2*/
targetX[iii]+1, targetY[iii]-1, targetZ[iii]-1,
targetX[iii]+1, targetY[iii]-1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]+1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]+1, targetZ[iii]-1,
/*Side 3*/
targetX[iii]-1, targetY[iii]-1, targetZ[iii]-1,
targetX[iii]-1, targetY[iii]-1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]-1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]-1, targetZ[iii]-1,
/*Side 4*/
targetX[iii]-1, targetY[iii]+1, targetZ[iii]-1,
targetX[iii]-1, targetY[iii]+1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]+1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]+1, targetZ[iii]-1,
/*Side 5*/
targetX[iii]-1, targetY[iii]-1, targetZ[iii]-1,
targetX[iii]-1, targetY[iii]+1, targetZ[iii]-1,
targetX[iii]+1, targetY[iii]+1, targetZ[iii]-1,
targetX[iii]+1, targetY[iii]-1, targetZ[iii]-1,
/*Side 6*/
targetX[iii]-1, targetY[iii]-1, targetZ[iii]+1,
targetX[iii]-1, targetY[iii]+1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]+1, targetZ[iii]+1,
targetX[iii]+1, targetY[iii]-1, targetZ[iii]+1
};
}
glBufferData(GL_ARRAY_BUFFER,
data.size()*sizeof(GLfloat),
&data[0],
GL_STREAM_DRAW);
for(iii=0;iii语法的问题在于,如果说targetVertices[iii],那么您指的是数组的第i个索引,而不是整个列。2D数组存储为1D数组,但提供了[][]以便于访问。您可以将其称为一维或二维数组
下面是一种更可重用的方法
void addVertex(std::vector<GLfloat> &data, GLfloat x, GLfloat y, GLfloat z)
{
data.push_back(x);
data.push_back(y);
data.push_back(z);
}
非常感谢,我将尝试并实现您的解决方案。但是,出于理解的目的,为什么我不能简单地将数据逐行分配给数组?它适用于字符数组(至少在ANSI-C中是这样)。此外,我可能有措词错误,因为它本身不是初始化,而是分配(我预先在两个嵌套for循环中进行初始化,都是零)。它可能通过使用“new”关键字工作吗?比如,在我的头文件和构造函数targetVertices=new-GLfloat[][]中写入GLfloat*targetVertices;或者其他什么?语法的问题是说targetVertices[iii]您指的是阵列的第i个索引,而不是整个列。请参阅,2D阵列存储为1D阵列,但提供[][]以便于访问。您可以将其称为一维或二维。如果您已经分配了10x72阵列,则无需“新建”。