Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 读取原始3D纹理并切片立方体_C++_Opengl_Textures_Volume Rendering - Fatal编程技术网

C++ 读取原始3D纹理并切片立方体

C++ 读取原始3D纹理并切片立方体,c++,opengl,textures,volume-rendering,C++,Opengl,Textures,Volume Rendering,使用以下命令读取原始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); 现在,我想在某个垂直方向上“切片”

使用以下命令读取原始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);
现在,我想在某个垂直方向上“切片”立方体,并通过以下方式显示数据:

glTexImage2D()
抓取这些切片的聪明方法是什么?我试着弄清楚如何使用循环获取数据,但我不确定数据是如何组织的,我不觉得这个循环很琐碎


我可以将数据映射成更简单的格式,以便使用直观的切片语法吗?

它只是一个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];
        }
    }
}
for(无符号整数切片=0;i

你可以用它变得更时尚。

它只是一个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];
        }
    }
}
for(无符号整数切片=0;i

您可以使用。

对不起,我不明白,您从文件中读取
width*height*depth
字节,然后将其转换为rgba?您不应该将数据视为灰度数据还是读取(并分配)四倍的字节?至于显示,我想你可以用正确的3d纹理坐标画一个多边形。你说得对。数据集来自以下站点:,我现在更改了代码以反映RGB。当我像这样读入头骨时,我能够显示头骨(网站上的最后一幅图像)。没有其他原因,我想在使用3D纹理渲染之前了解2D纹理切片。所以你只想在垂直于X、Y或Z轴的某个位置提取2D图像?不是任意定向的平面?是的,垂直于x、y或z。对不起,我不明白,你从文件中读取
width*height*depth
字节,然后转换到rgba?您不应该将数据视为灰度数据还是读取(并分配)四倍的字节?至于显示,我想你可以用正确的3d纹理坐标画一个多边形。你说得对。数据集来自以下站点:,我现在更改了代码以反映RGB。当我像这样读入头骨时,我能够显示头骨(网站上的最后一幅图像)。没有其他原因,我想在使用3D纹理渲染之前了解2D纹理切片。所以你只想在垂直于X、Y或Z轴的某个位置提取2D图像?不是任意定向的平面?是的,垂直于x,y或z。接下来的问题是,我的rgb图像[256*256*256](1d)数组是如何相对于3D数组进行组织的?3D坐标(x,y,z)到1d:
图像[(x*yw+y)*zw+z]
,其中
yw
zw
是该维度中3D数组的大小。谢谢。接下来的问题是,我的rgb图像[256*256*256](1d)数组是如何相对于3D数组进行组织的?3D坐标(x,y,z)到1d:
图像[(x*yw+y)*zw+z]
,其中
yw
zw
是该维度中3D数组的大小。