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 =( unsigned short *) 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值