[vtkusers] Uneven colors after the vtkButterflySubdivisionFilter

David Gobbi david.gobbi at gmail.com
Sun Apr 21 16:27:57 EDT 2013


The specialization is already there in the vtkDataArray code.  Integer
scalars have their own code path.  VTK isn't as far behind the times
as you seem to think ;)

On Sun, Apr 21, 2013 at 2:24 PM, Bill Lorensen <bill.lorensen at gmail.com> wrote:
> In ITK we use traits to turn runtime tests into compile tests. This might
> help, And specialization might help to provide clamping for those types that
> need it.
>
>
>
>
> On Sun, Apr 21, 2013 at 4:14 PM, David Gobbi <david.gobbi at gmail.com> wrote:
>>
>> Yes, but performance could equally well be a non-issue.  No way to be
>> sure without trying a fix and doing some timings.  I strongly suspect
>> the performance hit would be negligible, given the large amount of
>> code in InterpolateTuple().
>>
>>  - David
>>
>>
>> On Sun, Apr 21, 2013 at 1:43 PM, Bill Lorensen <bill.lorensen at gmail.com>
>> wrote:
>> > Performance could be an issue.
>> >
>> >
>> > On Sun, Apr 21, 2013 at 3:39 PM, David Gobbi <david.gobbi at gmail.com>
>> > wrote:
>> >>
>> >> Hi Bill,
>> >>
>> >> I traced the code that is interpolating the scalars, and it led me to
>> >> the following function in vtkDataArray.cxx, which is called from
>> >> vtkDataArray::InterpolateTuple().  In fact, that is the only place
>> >> this function is called from.
>> >>
>> >>   template <class T>
>> >>   inline void vtkDataArrayRoundIfNecessary(double val, T* retVal)
>> >>   {
>> >>     *retVal = static_cast<T>((val>=0.0)?(val + 0.5):(val - 0.5));
>> >>   }
>> >>
>> >> It might be good for us to add a clamp here immediately before the
>> >> cast, rather than to trust that the weights will never sum to a value
>> >> greater than one.
>> >>
>> >> Either that, or vtkButterflySubdivisionFilter can be modified so that
>> >> it normalizes the weights before it interpolates the scalars (i.e. it
>> >> would be approximating when computing the points, but would use
>> >> normalized weights when computing the scalars).  My preference,
>> >> though, would be to modify vtkDataArray in order to make the fix more
>> >> general.
>> >>
>> >>  - David
>> >>
>> >>
>> >>
>> >> On Sun, Apr 21, 2013 at 10:12 AM, Bill Lorensen
>> >> <bill.lorensen at gmail.com>
>> >> wrote:
>> >> > Maybe I have it this time.
>> >> >
>> >> > Multiple problems:
>> >> > 1) First number of points must be used, not number of ploys
>> >> > 2) I think color interpolation is overflowing/underflowing the
>> >> > unsigned
>> >> > char
>> >> >
>> >> > Solution. Use FloatArray for colors. After subdivision,  convert the
>> >> > floats
>> >> > to unsigned chars, clamping between 0 and 255.
>> >> >
>> >> > Attached is an example c++ that seems to work.
>> >> >
>> >> >
>> >> >
>> >> > On Sun, Apr 21, 2013 at 11:46 AM, Bill Lorensen
>> >> > <bill.lorensen at gmail.com>
>> >> > wrote:
>> >> >>
>> >> >> Oops. I still see problems after that change.
>> >> >>
>> >> >>
>> >> >>
>> >> >> On Sun, Apr 21, 2013 at 11:45 AM, Bill Lorensen
>> >> >> <bill.lorensen at gmail.com>
>> >> >> wrote:
>> >> >>>
>> >> >>> Found the problem.
>> >> >>>
>> >> >>> You want to set the point data, but your colors array is filled for
>> >> >>> NumberOfPolys. Replace NumberOfPolys with NumberOfPoints and the
>> >> >>> results
>> >> >>> look good.
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> On Sun, Apr 21, 2013 at 10:43 AM, DivyaS <div.anand141 at gmail.com>
>> >> >>> wrote:
>> >> >>>>
>> >> >>>> Bill,
>> >> >>>>
>> >> >>>> Butterfly subdivision gives me better results(shape) to the actual
>> >> >>>> data
>> >> >>>> i'm
>> >> >>>> working on. Is there no other way we can get this working? you
>> >> >>>> were
>> >> >>>> talking
>> >> >>>> about assigned scalar float, single component values, I would like
>> >> >>>> to
>> >> >>>> give
>> >> >>>> it a try.. could you please give me some details on that.
>
>
>
>
> --
> Unpaid intern in BillsBasement at noware dot com



More information about the vtkusers mailing list