[vtkusers] re: Try again - merging

Jared Cohen Jared.Cohen at noaa.gov
Thu Aug 19 15:29:20 EDT 2004


Yep, so basically I was already as close as I could get. ;-) Well, thanx 
anyway :-)

BTW, the code I posted was just a quick stub program, not the actual one 
I'm working on. In the real one, I already handle singularities at the 
poles :-)

Sean McInerney wrote:

> Uhh ... yeah ... that was my point ... but perhaps I was too detailed.
>
> If you want to texture map to a sphere without artifact, you cannot 
> merge ... period. BTW, you will still need to do the suggested 
> offsetting to avoid a singularity at the north pole ... and the 
> subsequent cataclysmic explosion ;-)
>
> I have attached your code minus merges and plus offsetting fixes.
>
> Rock on.
>
> -Sean
>
> Jared Cohen wrote:
>
>> Well, I tried using the offset, and the back-and-forth transform 
>> series. But once it passed through the CleanPolyData filter, it STILL 
>> gave me the band-o'-crap down the side. I'm starting to reach the 
>> same conclusion that I had reached the last time I tried this -- 
>> namely, that merging the points just isn't worth the headache. ;-)
>>
>> Sean McInerney wrote:
>>
>>> Jared,
>>>
>>>   You'll notice that the band of crap on your sphere is actually 
>>> your entire texture mirror mapped onto that single strip of polygons 
>>> ... not just from the center as I said previously ... unless that 
>>> strip is 1 pixel wide ;-)
>>>
>>> -Sean
>>>
>>> Sean McInerney wrote:
>>>
>>>> Hi Jared,
>>>>
>>>>   Actually, I think that I do understand your problem. If you merge 
>>>> the non-polar points along the edges of the plane mapped to the 
>>>> sphere, what  are the texture coordinates of those points? Get it? 
>>>> Before the merge, they're zero (0) on one side, one (1) on the 
>>>> other. After the merge, you are getting an interpolation between 0 
>>>> and 1 / thetaRes - 1 (i.e. some crap from the center of your image 
>>>> being placed along that border). Furthermore, by using the 
>>>> offsetting that I suggest, as well as going back and forth with the 
>>>> transform, you'll avoid having a black hole at the north pole 
>>>> (you'll see what I mean). The bottom line is that, for you, the 
>>>> only points worth merging are probably the poles. Even then, you'll 
>>>> end up with texture artifact that won't show up with merging.
>>>>
>>>>   So, this doesn't solve the *grand* merging debate, but it may 
>>>> solve yours ;-)
>>>>
>>>> -Sean
>>>>
>>>> Jared Cohen wrote:
>>>>
>>>>> Thanks, but I don't think you understand the problem. I can close 
>>>>> the gap just fine, but the two edges will overlap without being 
>>>>> merged together. It's when I merge them using a CleanPolyData 
>>>>> filter that I get the warping effect.
>>>>>
>>>>>
>>>>>
>>>>>> Hi Jared,
>>>>>>
>>>>>>   I have some C++ code based on the spherical Tcl example that I 
>>>>>> think solves your problem. It avoids a singularity at the Z axis 
>>>>>> by offsetting the plane by a very small amount. I am attaching 
>>>>>> the source file 'spherical.cxx'. It takes any valid 2D 
>>>>>> vtkImageReader2 input and maps it to a sphere in the manner that 
>>>>>> you describe.
>>>>>>
>>>>>> The Cmake configuration stuff is as follows:
>>>>>>
>>>>>> ADD_EXECUTABLE (spherical spherical.cxx)
>>>>>> TARGET_LINK_LIBRARIES (spherical vtkRendering vtkIO vtkGraphics)
>>>>>>
>>>>>> -Sean
>>>>>>
>>>> _______________________________________________
>>>> This is the private VTK discussion list. Please keep messages 
>>>> on-topic. Check the FAQ at: <http://public.kitware.com/cgi-bin/vtkfaq>
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://www.vtk.org/mailman/listinfo/vtkusers
>>>>
>>
>------------------------------------------------------------------------
>
>import sys
>from vtk import *
>
>deg2rad = 3.14159265359 / 180.0
>radius = 1.0
>th_min, th_max = 0.0, 360.0 * deg2rad
>ph_min, ph_max = 0.0, 180.0 * deg2rad
>
>#create the plane
>plane = vtkPlaneSource()
>plane.SetOrigin(radius, ph_max - 0.000001, th_min)
>plane.SetPoint1(radius, ph_max - 0.000001, th_max)
>plane.SetPoint2(radius, ph_min + 0.000001, th_min)
>plane.SetXResolution(36)
>plane.SetYResolution(18)
>plane.Update()
>
>#warp it into a sphere
>transform = vtkSphericalTransform()
>transform.Update()
>
>tpoly = vtkTransformPolyDataFilter()
>tpoly.SetInput(plane.GetOutput())
>tpoly.SetTransform(transform)
>tpoly.Update()
>
>#setup standard VTK pipeline
>mapper = vtkPolyDataMapper()
>mapper.SetInput(tpoly.GetOutput())
>mapper.ImmediateModeRenderingOn()
>mapper.Update()
>
>actor = vtkActor()
>actor.SetMapper(mapper)
>actor.PickableOn()
>actor.GetProperty().BackfaceCullingOn()
>
>reader = vtkPNMReader()
>reader.SetFileName("../../wrap/earth.ppm")
>
>texture = vtkTexture()
>texture.SetInput(reader.GetOutput())
>texture.InterpolateOn()
>
>actor.SetTexture(texture)
>
>ren = vtkRenderer()
>ren.AddActor(actor)
>
>win = vtkRenderWindow()
>win.AddRenderer(ren)
>win.SetSize(500, 500)
>
>iren = vtkRenderWindowInteractor()
>iren.SetRenderWindow(win)
>
>style = vtkInteractorStyleTrackballCamera()
>iren.SetInteractorStyle(style)
>
>iren.Initialize()
>win.Render()
>iren.Start()
>  
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20040819/050887bd/attachment.htm>


More information about the vtkusers mailing list