Domanda

Lettura di un 3d grezzo (256x256x256 cellule) trama (8bit) usando la seguente:

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

dove l'immagine RGBA è

typedef unsigned char byte;

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

Ora voglio "fetta" del cubo in qualche direzione perpendicolare e visualizzare i dati con:

glTexImage2D()

Che cosa è un modo intelligente per andare su afferrare queste fette? Ho cercato di ottenere la mia testa intorno a come per afferrare i dati utilizzando un ciclo, ma non sono esattamente sicuro di come i dati vengono orgaanized e non trovo questo ciclo di essere banale.

Potrei mappare i dati in un formato più banale in modo da poter utilizzare la sintassi fetta intuitivo?

È stato utile?

Soluzione

E 'solo una matrice 3D. Scegliere due assi per la scansione nel modello di accesso standard 2D e variare il terzo a fette cambiamento:

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];
        }
    }
}

È possibile ottenere più elaborato con Boost.MultiArray .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top