使用以下内容读取原始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()
抓住这些切片的巧妙方法是什么?我试图了解如何使用循环来获取数据,但我不确定数据是如何组织的,我不认为这个循环是微不足道的。
我可以将数据映射为更简单的格式,以便我可以使用直观的切片语法吗?
答案 0 :(得分:0)
这只是一个3D阵列。选择两个轴以标准2D访问模式进行扫描,并改变第三个以更改切片:
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
来获得更多体验。