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

ただし、これにより、配列の16行のそれぞれに1.0、1.0、-1.0が割り当てられるように見えます。ポインタを配列に割り当てる他の方法、たとえば次の行を試しました。

_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 に答える