[vtkusers] How To Texture Map a patch with vtkGlobeSource

Aashish Chaudhary aashish.chaudhary at kitware.com
Thu Nov 4 11:42:26 EDT 2010


Hi,

On Thu, Nov 4, 2010 at 11:34 AM, Joey Mukherjee <joeymu at gmail.com> wrote:

> Thanks for posting this example Aashish!
>
> I have some NetCDF data files that I would like to overlay over the Earth
> and be able to extract subsets from them and the like.  To get this same
> type of visualization, can I make use of the Geo classes?


Probably need more detail on exactly what you are trying to do but in
general you should be able to use Geo*  classes for the purpose above.


> Does the have to be a texture map or can I use any kind of regularized
> image data?
>
> Can you elaborate this?

Thanks,



> Thanks,
> Joey
>
>
> On Thu, Nov 4, 2010 at 8:25 AM, Aashish Chaudhary <
> aashish.chaudhary at kitware.com> wrote:
>
>>
>>
>> On Thu, Nov 4, 2010 at 12:43 AM, Donny <donnyz at charter.net> wrote:
>>
>>>  I just figured out that the vtkGlobeSource already converts the lat,lon
>>> points to world points in meters from a defined origin that can be set via
>>> SetOrigin().
>>>
>>> Problem solved. Thanks Aashish!!!
>>>
>> Make sense. Thats why I was not so sure what you meant by origin (I
>> thought you are referring to Datum).
>>
>> You are welcome. In fact I created a new test (cleaned version of the code
>> I sent earlier) and merged into VTK.
>>
>> commit:
>>
>> http://www.vtk.org/gitweb?p=VTK.git;a=commit;h=8cf560c2351ff457b0156b3cbc5f5cb4d5414401
>>
>>
>> <http://www.vtk.org/gitweb?p=VTK.git;a=commit;h=8cf560c2351ff457b0156b3cbc5f5cb4d5414401>
>> Thanks,
>>
>>
>>
>>>
>>> -----Original Message-----
>>> *From:* Donny [mailto:donnyz at charter.net]
>>> *Sent:* Wednesday, November 03, 2010 9:40 PM
>>> *To:* 'Aashish Chaudhary'
>>> *Cc:* 'vtkusers at vtk.org'
>>> *Subject:* RE: [vtkusers] How To Texture Map a patch with vtkGlobeSource
>>>
>>>
>>>
>>> Wow. Thanks Aashish.
>>>
>>> It would be nice if vtkTextureMapToSphere would do this mapping
>>> correctly.
>>>
>>> I have one question about implementing this. I need to convert the lat
>>> lon coordinates to meters from a defined origin. I think
>>> vtkGeoAssignCoordinates will do the job. Can I use this filter after the
>>> texture coordinates are set using your code?
>>>
>>>
>>>
>>> -----Original Message-----
>>>
>>> *From:* Aashish Chaudhary [mailto:aashish.chaudhary at kitware.com]
>>> *Sent:* Wednesday, November 03, 2010 1:05 AM
>>> *To:* Donny
>>> *Cc:* vtkusers at vtk.org
>>> *Subject:* Re: [vtkusers] How To Texture Map a patch with vtkGlobeSource
>>>
>>>
>>>
>>> Hi Donny,
>>>
>>>
>>>
>>> I didn't get the time to  clean this code but it will work for you ..
>>>
>>>
>>>
>>> I just modified a test (and hence it look bit different)
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> #include <vtkGlobeSource.h>
>>>
>>> #include <vtkPolyDataMapper.h>
>>>
>>> #include <vtkActor.h>
>>>
>>> #include <vtkPointData.h>
>>>
>>> #include <vtkDoubleArray.h>
>>>
>>> #include "vtkBMPReader.h"
>>>
>>> #include "vtkCamera.h"
>>>
>>> #include "vtkGeoAlignedImageRepresentation.h"
>>>
>>> #include "vtkGeoAlignedImageSource.h"
>>>
>>> #include "vtkGeoEdgeStrategy.h"
>>>
>>> #include "vtkGeoFileImageSource.h"
>>>
>>> #include "vtkGeoFileTerrainSource.h"
>>>
>>> #include "vtkGeoGlobeSource.h"
>>>
>>> #include "vtkGeoProjection.h"
>>>
>>> #include "vtkGeoProjectionSource.h"
>>>
>>> #include "vtkGeoRandomGraphSource.h"
>>>
>>> #include "vtkGeoSphereTransform.h"
>>>
>>> #include "vtkGeoTerrain.h"
>>>
>>> #include "vtkGeoTerrainNode.h"
>>>
>>> #include "vtkGeoTerrain2D.h"
>>>
>>> #include "vtkGeoTransform.h"
>>>
>>> #include "vtkGeoView.h"
>>>
>>> #include "vtkGeoView2D.h"
>>>
>>> #include "vtkGraphLayoutView.h"
>>>
>>> #include "vtkJPEGReader.h"
>>>
>>> #include "vtkRegressionTestImage.h"
>>>
>>> #include "vtkRenderedGraphRepresentation.h"
>>>
>>> #include "vtkRenderer.h"
>>>
>>> #include "vtkRenderWindow.h"
>>>
>>> #include "vtkRenderWindowInteractor.h"
>>>
>>> #include "vtkSmartPointer.h"
>>>
>>> #include "vtkStdString.h"
>>>
>>> #include "vtkTestUtilities.h"
>>>
>>> #include "vtkTIFFReader.h"
>>>
>>> #include "vtkViewTheme.h"
>>>
>>> #include "vtkViewUpdater.h"
>>>
>>> #include <vtksys/SystemTools.hxx>
>>>
>>>
>>>
>>> #define VTK_CREATE(type,name) \
>>>
>>>   vtkSmartPointer<type> name = vtkSmartPointer<type>::New();
>>>
>>> int TestGeoView(int argc, char* argv[])
>>>
>>> {
>>>
>>>   char* image = vtkTestUtilities::ExpandDataFileName(
>>>
>>>     argc, argv, "Data/usa_image.jpg");
>>>
>>>   vtkStdString imageFile = image;
>>>
>>>   vtkSmartPointer<vtkJPEGReader> reader =
>>>
>>>     vtkSmartPointer<vtkJPEGReader>::New();
>>>
>>>   reader->SetFileName(imageFile.c_str());
>>>
>>>   reader->Update();
>>>
>>>   double latRange[]  = {24, 50};
>>>
>>>   double longRange[] = {-126, -66};
>>>
>>>   VTK_CREATE(vtkGlobeSource, globeSource);
>>>
>>>   globeSource->SetStartLatitude(latRange[0]);
>>>
>>>   globeSource->SetEndLatitude(latRange[1]);
>>>
>>>   globeSource->SetStartLongitude(longRange[0]);
>>>
>>>   globeSource->SetEndLongitude(longRange[1]);
>>>
>>>   globeSource->Update();
>>>
>>>   VTK_CREATE(vtkActor, actor);
>>>
>>>   VTK_CREATE(vtkPolyDataMapper, mapper);
>>>
>>>   vtkDoubleArray* newArray (vtkDoubleArray::New());
>>>
>>>   newArray->SetNumberOfComponents(2);
>>>
>>>   vtkDoubleArray* array = vtkDoubleArray::SafeDownCast(globeSource->GetOutput(0)->GetPointData()->GetAbstractArray("LatLong"));
>>>
>>>   double range[] = { (latRange[1] -latRange[0]),
>>>
>>>                      (longRange[1] - longRange[0]) };
>>>
>>>   double val[2];
>>>
>>>   double newVal[2];
>>>
>>>   for(int i=0; i < array->GetNumberOfTuples(); ++i)
>>>
>>>     {
>>>
>>>      array->GetTupleValue(i, val);
>>>
>>>      newVal[1] = (val[0] - latRange[0])  / range[0];
>>>
>>>      newVal[0] = (val[1] - longRange[1]) / range[1];
>>>
>>>      newArray->InsertNextTuple(newVal);
>>>
>>>     }
>>>
>>>   globeSource->GetOutput(0)->GetPointData()->SetTCoords(newArray);
>>>
>>>   mapper->SetInput( globeSource->GetOutput(0) );
>>>
>>>   actor->SetMapper(mapper);
>>>
>>>   VTK_CREATE(vtkTexture, texture);
>>>
>>>   texture->SetInput(reader->GetOutputDataObject(0));
>>>
>>>   actor->SetTexture(texture);
>>>
>>>   VTK_CREATE(vtkRenderWindow, renWin);
>>>
>>>   VTK_CREATE(vtkRenderWindowInteractor, renWinInt);
>>>
>>>   VTK_CREATE(vtkRenderer, ren);
>>>
>>>   ren->AddActor(actor);
>>>
>>>   renWin->AddRenderer(ren);
>>>
>>>   renWinInt->SetRenderWindow(renWin);
>>>
>>>   renWin->SetSize(400,400);
>>>
>>>   renWin->Render();
>>>
>>>   renWinInt->Initialize();
>>>
>>>   renWin->Render();
>>>
>>>   int retVal = vtkRegressionTestImage( renWin );
>>>
>>>   if( retVal == vtkRegressionTester::DO_INTERACTOR)
>>>
>>>     {
>>>
>>>     renWinInt->Start();
>>>
>>>     }
>>>
>>>   return 0;
>>>
>>> }
>>>
>>>
>>>
>>> Attached is the screenshot of my test..
>>>
>>>
>>>
>>>
>>>
>>> On Tue, Nov 2, 2010 at 10:56 PM, Donny <donnyz at charter.net> wrote:
>>>
>>> Thanks for the help Aashish. I have attached 3 image files, one with the
>>> AutomaticSphereGenerationOff() set on the vtkTextureMapToSphere object
>>> and
>>> one with AutomaticSphereGenerationOn(). The third image is not a
>>> screenshot,
>>> it is the actual texture I am trying to map to the patch.  The only
>>> settings
>>> I set on the vtkGlobeSource are :
>>> gs->SetStartLatitude(24.0);
>>> gs->SetEndLatitude(50.0);
>>> gs->SetStartLongitude(-126.0);
>>> gs->SetEndLongitude(-66.0);
>>>
>>> As you can see the GlobeSource patch geometry is rendering as intended,
>>> but
>>> the texture is not appearing correctly.
>>>
>>>
>>> "you can have
>>>
>>> tx = asin(Nx)/PI  + 0.5
>>> ty = asin(Ny)/PI + 0.5"
>>>
>>> Is there a filter that will perform this mapping for me?
>>>
>>> Thanks.
>>>
>>>
>>> -----Original Message-----
>>> From: Aashish Chaudhary [mailto:aashish.chaudhary at kitware.com]
>>> Sent: Tuesday, November 02, 2010 10:11 AM
>>> To: Donny
>>> Cc: vtkusers at vtk.org
>>> Subject: Re: [vtkusers] How To Texture Map a patch with vtkGlobeSource
>>>
>>> Hi Donny,
>>> - Show quoted text -
>>> I have not used vtkTextureMapToSphere myself but can you try to
>>> generate your own texture coordinates? globe source does produce
>>> normals and in its very simplistic approach  ...
>>>
>>> you can have
>>>
>>> tx = asin(Nx)/PI  + 0.5
>>> ty = asin(Ny)/PI + 0.5
>>>
>>> In a shader you can do it easily.  Not sure why vtkTextureMapToSphere
>>> didn't work. Will find out.
>>>
>>> Can you post a snapshot?
>>>
>>> On Tue, Nov 2, 2010 at 12:01 AM, Donny <donnyz at charter.net> wrote:
>>> > I have created a globe patch with vtkGlobeSource for the general area
>>> of
>>> the
>>> > United States (Lat 24 to 50 Deg, Lon -126 to -66 Deg.) using
>>> > SetLatitudeStart, SetLatitudeEnd ... I also have a .bmp image that
>>> > corresponds to these extents and cannot find a filter to generate the
>>> > texture coordinates for this patch so I can texture it. I tried
>>> > vtkTextureMapToSphere and turned auto generate sphere to off but it
>>> only
>>> > displayed a small portion of the image onto the patch. How can I
>>> generate
>>> > the texture coordinates for a patch such as this?
>>> >
>>> >
>>> >
>>> > Thanks.
>>> >
>>> >
>>> >
>>> > Donny Zimmerman
>>> >
>>> >
>>> >
>>> > _______________________________________________
>>> > 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://www.vtk.org/mailman/listinfo/vtkusers
>>> >
>>> >
>>>
>>>
>>>
>>> --
>>> | Aashish Chaudhary
>>> | R&D Engineer
>>> | Kitware Inc.
>>> | www.kitware.com
>>>
>>>
>>>
>>>
>>> --
>>> | Aashish Chaudhary
>>> | R&D Engineer
>>> | Kitware Inc.
>>> | www.kitware.com
>>>
>>
>>
>>
>> --
>> | Aashish Chaudhary
>> | R&D Engineer
>> | Kitware Inc.
>> | www.kitware.com
>>
>> _______________________________________________
>> 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://www.vtk.org/mailman/listinfo/vtkusers
>>
>>
>


-- 
| Aashish Chaudhary
| R&D Engineer
| Kitware Inc.
| www.kitware.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20101104/5bdbfdb1/attachment.htm>


More information about the vtkusers mailing list