さて、私は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");
}
ただし、これにより、配列の16行のそれぞれに1.0、1.0、-1.0が割り当てられるように見えます。ポインタを配列に割り当てる他の方法、たとえば次の行を試しました。
_vertices_colors = verticesColors;
verticesColorsは配列への定数ポインターであるため、これでうまくいくと思いましたが、同じ結果が得られます。memcpyも使ってみました:
memcpy(_vertices_colors, verticesColors, sizeof(_vertices_colors));
しかし、これはいくつかの制御できない結果を生み出すようです。最初の各列を1.0として割り当て、残りを非常に大きな負の整数として割り当てます。私の最初の方法が機能しない理由を誰かが理解できますか?