0

好的,所以我有一个模型类,其中包含指向(将是)point3 对象数组的指针:

point3* _vertices_colors;

Point3 具有以下 typedef:

typedef GLfloat point3[3];

本质上使 point3 对象数组成为数组数组。然后在派生类的构造函数中,我为要存储的顶点数和颜色分配内存,如下所示:

_vertices_colors = new point3[16];

这意味着我的对象有 8 个顶点并存储了自己的颜色。然后我在准备复制到指针的堆栈上定义以下数组:

point3 verticesColors[] = {
                            {1.0, 1.0, 1.0}, {1.0, 0.0, 0.0},
                            {-1.0, 1.0, 1.0}, {1.0, 0.0, 0.0},
                            {-1.0, -1.0, 1.0},{1.0, 0.0, 0.0},
                            {1.0, -1.0, 1.0},{1.0, 0.0, 0.0},
                            {1.0, 1.0, -1.0}, {1.0, 0.0, 0.0},
                            {-1.0, 1.0, -1.0}, {1.0, 0.0, 0.0},
                            {-1.0, -1.0, -1.0},{1.0, 0.0, 0.0},
                            {1.0, -1.0, -1.0},{1.0, 0.0, 0.0}
                        };

然后,我使用 for 循环复制到堆上的数组:

for(int i = 0; i < 16; i++)
{
    *_vertices_colors[i,0] = *verticesColors[i, 0];
    *_vertices_colors[i,1] = *verticesColors[i, 1];
    *_vertices_colors[i,2] = *verticesColors[i, 2];

    printf("%15f", *_vertices_colors[i,0]);
    printf("\t");
    printf("%15f", *_vertices_colors[i,1]);
    printf("\t");
    printf("%15f", *_vertices_colors[i,2]);
    printf("\n");
}

但是,这似乎将 1.0、1.0、-1.0 分配给数组的 16 行中的每一行。我尝试了其他将指针分配给数组的方法,例如以下行:

_vertices_colors = verticesColors;

由于 verticesColors 是指向数组的常量指针,我认为这会起作用,但是它会产生相同的结果。我也尝试过使用 memcpy:

memcpy(_vertices_colors, verticesColors, sizeof(_vertices_colors));

但这似乎会产生一些不可控的结果。它将第一列中的每一列分配为 1.0,将其余列分配为非常大的负整数。谁能明白为什么我的第一种方法不起作用?

4

1 回答 1

5

*_vertices_colors[i,0] = *verticesColors[i, 0];
*_vertices_colors[i,1] = *verticesColors[i, 1];
*_vertices_colors[i,2] = *verticesColors[i, 2];

相当于

*_vertices_colors[0] = *verticesColors[0];
*_vertices_colors[1] = *verticesColors[1];
*_vertices_colors[2] = *verticesColors[2];

您在数组订阅中使用序列运算符,,它产生序列的最后一个值。在本例中为 0、1 和 2。

多维数组被访问为

_vertices_colors[i][0] = verticesColors[i][0];
于 2012-11-02T12:50:56.517 回答