[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