VTK里面imgedata体绘制遇到的问题
我在创建imagedata并进行体绘制时,遇到奇怪的问题:
每次运行完后,提示“excited with code 255”,然后不出现图像窗口

float *ptr=(float*)imageData->GetScalarPointer();
//ptr=(float *)imageData->GetScalarPointer();
for(int i=0;i<nx*ny*nz;i++)
{
  fscanf(fp,"%f",&velocity);
  //fscanf(fp,"%f",&lat);

  //printf("%e\n",flux);

   //velocity=velocity*1.0;
   cout<<velocity<<endl;
   //*ptr++=i;
   *ptr++=(float)(velocity);
   cout<<*ptr++<<endl;

   //fscanf(fp,"%*[^\n]%*c"); /* 跳过一行字符串 */
}




后来我发现问题是没有搞明白imagedata在使用volumeRayCast算法时应该是针对unsigned  char  和unsigned short类型的数据,将数据类型改过来,不再有错误提示
unsigned short *ptr=(unsignedshort*)imageData->GetScalarPointer();
//ptr=(float *)imageData->GetScalarPointer();
for(int i=0;i<nx*ny*nz;i++)
{
  fscanf(fp,"%f",&velocity);
  //fscanf(fp,"%f",&lat);

  //printf("%e\n",flux);

   //velocity=velocity*1.0;
   cout<<velocity<<endl;
   //*ptr++=i;
   *ptr++=(unsigned short)(velocity);
   cout<<*ptr++<<endl;

   //fscanf(fp,"%*[^\n]%*c"); /* 跳过一行字符串 */

}

因为vtkImageData 对象的自变量的 SetInput()方法。某                       vtkVolumeRayCastMapper   vtkVolumeTextureMapper2D     VTK_UNSIGNED_CHAR   VTK_UNSIGNED_SHORT 数据。vtkVolumeProMapper 更为限制性的因为它只支持 8 或者 12 位数据, 12 位数据表示为 VTK_UNSIGNED_SHORT 数据,最重要的位在 16 位之外的高 12 位或者低 12 位。(如果你的数据不是上面期望的类型,你可以使用 vtkImageShiftScale 来把数据的比例调整为正确的范围并且把它转化为正确的类型)
例如:
double newrange=65535.0;///////因为unsigned short范围0-65535,
      double oldrange=0.0;
      oldrange=imageData->GetScalarRange()[1]-imageData->GetScalarRange()[0];
      vtkSmartPointer<vtkImageShiftScale> shiftScaleFilter =
          vtkSmartPointer<vtkImageShiftScale>::New();
        shiftScaleFilter->SetOutputScalarTypeToUnsignedShort();
      #if VTK_MAJOR_VERSION <= 5
        shiftScaleFilter->SetInputConnection(imageData->GetProducerPort());
      #else
        shiftScaleFilter->SetInputData(imageData);
      #endif
        shiftScaleFilter->SetShift((-1.0f*imageData->GetScalarRange()[0]));/////先将数据平移到0,移动大小为GetScalarRange()[0]
        shiftScaleFilter->SetScale(newrange/oldrange);
        shiftScaleFilter->Update();
以上代码就将数据范围重新映射到0-65535,tongs2转换为unsigedshort类型。下次就可以将shiftscalefilter的输出作为体绘制数据输入
具体可以参考:http://blog.csdn.net/www_doling_net/article/details/8547317
阅读更多
文章标签: vtk imagedata 体绘制
个人分类: VTK
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

VTK里面imgedata体绘制遇到的问题

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭