2

以下を使用して、生の3D(256x256x256セル)テクスチャ(8ビット)を読み取ります。

f = fopen(file, "rb");
if (f == NULL) return;
int size = width * height * depth;
data = new unsigned char[size*3];
fread(data, 3, size, f);
image = reinterpret_cast<rgb *>(data);
fclose(f);

ここで、画像のrgbaは

typedef unsigned char byte;

    typedef struct {
        byte r;
        byte g;
        byte b;
    } rgb;

次に、立方体を垂直方向に「スライス」して、次のようにデータを表示します。

glTexImage2D()

これらのスライスをつかむための賢い方法は何ですか?ループを使用してデータを取得する方法について頭を悩ませようとしましたが、データがどのように編成されているか正確にはわかりません。また、このループは簡単ではありません。

直感的なスライス構文を使用できるように、データをより簡単な形式にマッピングできますか?

4

1 に答える 1

0

それは単なる3D配列です。標準の 2D アクセス パターンでスキャンする 2 つの軸を選択し、3 番目の軸を変更してスライスを変更します。

for( unsigned int slice = 0; i < numSlices; ++i )
{
    for( unsigned int x = 0; x < xSize; ++x )
    {
        for( unsigned int y = 0; y < ySize; ++y )
        {
            // XY slice
            output[x][y] = array[x][y][slice];

            // XZ slice
            output[x][y] = array[x][slice][y];

            // YZ slice
            output[x][y] = array[slice][x][y];
        }
    }
}

でより洗練されたものにすることができますBoost.MultiArray

于 2011-10-19T21:19:40.313 に答える