繁体   English   中英

在C ++中初始化GLfloats的多维数组

[英]Initializing a multidimensional array of GLfloats in C++

我currenty有我脑袋里结对如何通过正确初始化行线 GLFloats的数组。 据我所知,可以这样写一个数组:

int a[2][2] = {{1,2},{3,4}}

就我而言,我有阵列

GLfloat targetVertices[10][72];

用于立方体的六个边的​​顶点(准确地说是十个立方体)。 立方体坐标存储在

float targetX[10], targetY[10], targetZ[10];

数组。 我想这样初始化它:

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

不幸的是,我总是被告知关于第一个弯曲的括号(C2059和C2143,但是在那对我来说没有任何意义)的语法错误。 我希望我的问题很清楚,有人可以帮助我。 我在此站点或任何其他站点上都没有找到与我的问题类似的东西。

提前致谢!

语法的问题是通过说targetVertices [iii]来引用数组的第iii个索引,而不是整个列。 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);
}

void addCube(std::vector<GLfloat> &data, GLfloat x, GLfloat y, GLfloat z)
{
    addVertex(data, x-1, y-1, z-1);
    addVertex(data, x-1, y-1, z+1);
    addVertex(data, x-1, y+1, z+1);
    addVertex(data, x-1, y+1, z-1);

    addVertex(data, x+1, y-1, z-1);
    addVertex(data, x+1, y-1, z+1);
    addVertex(data, x+1, y+1, z+1);
    addVertex(data, x+1, y+1, z-1);

    addVertex(data, x-1, y-1, z-1);
    addVertex(data, x-1, y-1, z+1);
    addVertex(data, x+1, y-1, z+1);
    addVertex(data, x+1, y-1, z-1);

    addVertex(data, x-1, y+1, z-1);
    addVertex(data, x-1, y+1, z+1);
    addVertex(data, x+1, y+1, z+1);
    addVertex(data, x+1, y+1, z-1);

    addVertex(data, x-1, y-1, z-1);
    addVertex(data, x-1, y+1, z-1);
    addVertex(data, x+1, y+1, z-1);
    addVertex(data, x+1, y-1, z-1);

    addVertex(data, x-1, y-1, z+1);
    addVertex(data, x-1, y+1, z+1);
    addVertex(data, x+1, y+1, z+1);
    addVertex(data, x+1, y-1, z+1);
}

void makeCubes(std::vector<GLfloat> &data)
{
    float targetX[10], targetY[10], targetZ[10];
            data.clear();
            data.reserve(720);

    //...initialize the above arrays...

    for (int i=0; i<10; i++)
    {
        std::vector<GLfloat> newData;
        addCube(newData, targetX[i], targetY[i], targetZ[i]);
        data.insert(data.begin(), newData.begin(), newData.end());
    }
}

您可以通过引用第一个元素轻松地将其转换为C数组:

std::vector<GLfloat> data;
makeCubes(data);
GLfloat *cArray = &data[0];

可以这样调用glBufferData:

glBufferData(GL_ARRAY_BUFFER,
             data.size()*sizeof(GLfloat),
             &data[0],
             GL_STREAM_DRAW);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM