[vtkusers] Volume Rendering with Voxel Specific Color

Cory Jones cjayjones at gmail.com
Tue Jul 1 08:19:24 EDT 2014


The opacity function in the previous email is the only one I am creating.
Is there an error in that code then?

Thanks.


On Mon, Jun 30, 2014 at 8:09 PM, Lisa Avila <lisa.avila at kitware.com> wrote:

> Cory,
>
> Note that if you are using non-independent components, you'd only use the
> first scalar opacity function, not the fourth. That is, there is only one
> scalar opacity function (because there is only one channel being used to
> control opacity - it just happens to be either the 2nd or the 4th component
> depending on whether you are rendering IA or RGBA data). So likely your
> issue now is that you are using whatever default opacity function is
> created for you if you try to render without one already created. :-)
>
> Lisa
>
>
>
> On Mon, Jun 30, 2014 at 4:08 PM, Cory Jones <cjayjones at gmail.com> wrote:
>
>> Thank you for the feedback. That fixed the color problem. I am not sure I
>> understand the use of component 4 though. I am trying to use it to set the
>> opacity of the volume using the volume property SetScalarOpacity with a
>> vtkPiecewiseFunction. The code I am using is:
>>
>>   vtkSmartPointer<vtkPiecewiseFunction> compositeOpacity =
>>     vtkSmartPointer<vtkPiecewiseFunction>::New();
>>   compositeOpacity->AddPoint(0.0,0.0);
>>   compositeOpacity->AddPoint(1.0,0.25);
>>   compositeOpacity->AddPoint(255.0,0.25);
>>   volumeProperty->SetScalarOpacity(3,compositeOpacity);
>>
>> I set the portions of the volume I want to have not visible to 0 on the
>> fourth channel of the volume (component 3) and then am trying to set the
>> opacity to 0 for those positions using the code above. I am not getting a
>> change in the opacity using this. Is there another way to accomplish this,
>> or have I just made an error in the above?
>>
>> Thanks.
>>
>>
>> On Thu, Jun 26, 2014 at 12:42 PM, Lisa Avila <lisa.avila at kitware.com>
>> wrote:
>>
>>> Hello Cory,
>>>
>>> In the volume property you'll need to indicate that you don't have
>>> independent components. That is, by default this is set to true and
>>> therefore VTK assumes you are representing separate properties which each
>>> of the scalar components (for example pressure and density). In that case,
>>> each scalar is passed through its own lookup tables for color and opacity
>>> and the resulting values are merged based on the weightings of the
>>> components.
>>>
>>> VTK also supports IA (intensity / alpha) and RGBA data. This must be 2
>>> or 4 component unsigned char data. Once you set it so that your components
>>> are not independent, the last component will be considered a scalar lookup
>>> into your opacity transfer function, and the first one or three components
>>> will be used to represent your color. In the case of 2 component data (IA),
>>> that first component will be passed through the color transfer function. In
>>> the case of 4 component data (RGBA) those first three components will be
>>> directly considered the RGB color of that voxel.
>>>
>>> Note that if you have 3 component RGB data you'll need to do something
>>> to create a 4th component (otherwise you have no concept of alpha and you
>>> just have a solid block of color). Typical methods of generating that
>>> fourth component include assigning it to be the hue or intensity of the RGB
>>> value. For example, with the visible human data we usually assign the
>>> fourth component to be hue since the body was encased in a blue gel (we can
>>> then set the opacity of the blue hue to be zero, thereby seeing the human
>>> inside the cube).
>>>
>>> Hope this helps.
>>>
>>> Lisa
>>>
>>>
>>>
>>> On Wed, Jun 25, 2014 at 1:49 PM, Cory Jones <cjayjones at gmail.com> wrote:
>>>
>>>> I am trying to render a volume from 3D ImageData and I want to be able
>>>> to control the color of each voxel independently using the color channels.
>>>> I am able to set the number of scalar components in my ImageData to 3 and
>>>> set each channel separately. I am rendering using vtkSmartVolumeMapper. Is
>>>> there a way to set the vtkVolumeProperty so that the image renders the 3
>>>> channels as RGB? I have tried using the vtkColorTransferFunction
>>>> SetColorSpaceToRGB(), but this does not work. Again, I don't want to do
>>>> scalar color mapping. My current code is:
>>>>
>>>>
>>>>   vtkSmartPointer<vtkSmartVolumeMapper> volumeMapper =
>>>>               vtkSmartPointer<vtkSmartVolumeMapper>::New();
>>>>   volumeMapper->SetBlendModeToComposite();
>>>>   volumeMapper->SetInputConnection(outputImageData->GetProducerPort());
>>>>
>>>>   vtkSmartPointer<vtkVolumeProperty> volumeProperty =
>>>>     vtkSmartPointer<vtkVolumeProperty>::New();
>>>>   volumeProperty->ShadeOff();
>>>>   volumeProperty->SetInterpolationType(VTK_LINEAR_INTERPOLATION);
>>>>
>>>>   vtkSmartPointer<vtkColorTransferFunction> color =
>>>>     vtkSmartPointer<vtkColorTransferFunction>::New();
>>>>   color->SetColorSpaceToRGB();
>>>>   volumeProperty->SetColor(color);
>>>>
>>>>   vtkSmartPointer<vtkVolume> volume =
>>>>     vtkSmartPointer<vtkVolume>::New();
>>>>   volume->SetMapper(volumeMapper);
>>>>   volume->SetProperty(volumeProperty);
>>>>
>>>> _______________________________________________
>>>> Powered by www.kitware.com
>>>>
>>>> Visit other Kitware open-source projects at
>>>> http://www.kitware.com/opensource/opensource.html
>>>>
>>>> Please keep messages on-topic and check the VTK FAQ at:
>>>> http://www.vtk.org/Wiki/VTK_FAQ
>>>>
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://public.kitware.com/mailman/listinfo/vtkusers
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20140701/e0a73770/attachment.html>


More information about the vtkusers mailing list