c++ cuda示例代码中的.raw文件格式是什么?

q5iwbnjs  于 2023-01-06  发布在  其他
关注(0)|答案(2)|浏览(192)

我正在通过cuda v6.5示例代码- volumeRender渲染一些体数据。我在另一个程序中有一些RGB颜色不同的体素数据。我想通过将它们输出为.raw文件格式来渲染它们。然而,如何在volumeRender中输出与输入.raw文件完全相同的.raw格式让我很困惑。
据我所知,一个.raw文件可以包含一个体积数据数组。我尝试在volumrRender中使用文本编辑器打开名为“Bucky.raw”的.raw文件,但没有成功。文本是乱码文本。因此,我不知道.raw文件的格式。
接下来,我尝试阅读示例代码并弄清楚.cpp文件是如何读取这种格式的。我得到的唯一信息是卷大小。它是unsigned char * width * height * depth
这是否意味着每个体素数据只由一个无符号字符表示?这个无符号字符意味着什么?是体素的灰度吗?
我试着输出我的体素RGB数据的灰度,但结果是相当有线如下。
第一节第一节第一节第一节第一次
顶部是我的体素数据和PCL可视化。另一个是渲染结果。显然,这是错误的格式为volumeRender程序。
我知道有很多不同格式的.raw文件,但我想也许只有一种.raw格式只用于cuda示例代码。有人知道如何存储.raw格式就像“Bucky.raw”格式吗?

6pp0gazn

6pp0gazn1#

这是否意味着每个体素数据只由一个无符号字符表示?这个无符号字符是什么意思?是体素的灰度吗?
是,每个体素由一个unsigned char(即VolumeType)表示,值(0-255)表示体素的“透射率”(即密度的倒数),体素值0表示最低透射率/最高“密度”(创建“较暗”区域),体素值255表示低密度(创建“较亮”区域)。
存储顺序的维度在x、y和z上快速变化。在程序中可以很容易地发现体积的实际维度为volumeSize.width(x)、volumeSize.height(y)和volumeSize.depth(z)。x表示水平方向,y表示垂直方向,z表示进出屏幕的方向。
有人知道如何存储.raw格式就像“布基.raw”格式吗?
这是一个程序,你可以用它来编写不同类型的“滤线器原始”文件。尺寸将是32,32,32,这是程序中的默认值。
如果您编译这个程序,然后使用命令行参数0-4运行它,那么在运行volumeRender示例代码时,您会看到不同的模式。

cat buckywriter.cpp
#include <fstream>
#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;
const int sz = 32;
const int method_max = 4;

int myfunc(int x, int y, int z, int method){

  switch (method){
    case 0:
      return x;
      break;
    case 1:
      return y;
      break;
    case 2:
      return z;
      break;
    case 3:
      return x+y;
      break;
    case 4:
      return (x+y)*2*((z+1)/float(sz));
      break;
    default:
      return x;
      break;
    }
    return 0;
}


int main(int argc, char *argv[]){

  int method = 0;
  if (argc > 1) method = atoi(argv[1]);
  ofstream fout;
  string foname("Bucky.raw");
  fout.open(foname.c_str());
  if (!fout) {std::cout << "file open failed" << std::endl; return 1;}
  for (int z = 0; z < sz; z++)
    for (int y = 0; y < sz; y++)
      for (int x = 0; x < sz; x++)
        fout << (unsigned char)(myfunc(x, y, z, method));
  if (!fout) {std::cout << "file write failed" << std::endl; return 1;}
  fout.close();
  return 0;
}

$ g++ buckywriter.cpp -o buckywriter
$ ./buckywriter 3
$ ./volumeRender

这是上述buckywriter 3情况的图形输出,其在x和y中创建了增加的透射率梯度:

c3frrgcw

c3frrgcw2#

我在Swift中使用Xcode创建了一个简单的示例程序,它将Goxel模型转换为NVIDIA CUDA示例程序VolumeRender和VolumeFilter使用的.raw格式。
在Goxel中构建模型,将其导出为.txt
然后运行Goxel2Raw程序。
Goxel2Raw on Github

相关问题