好的,所以我有一个模型类,其中包含指向(将是)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,将其余列分配为非常大的负整数。谁能明白为什么我的第一种方法不起作用?