[vtkusers] How To Texture Map a patch with vtkGlobeSource

Aashish Chaudhary aashish.chaudhary at kitware.com
Thu Nov 4 00:13:41 EDT 2010


On Wed, Nov 3, 2010 at 10:40 PM, Donny <donnyz at charter.net> wrote:

>  Wow. Thanks Aashish.
>


>  It would be nice if vtkTextureMapToSphere would do this mapping
> correctly.
>

I have to look into the implementation to say for sure. But modelling tools
like Maya / 3D Max has spherical projection techniques to generate UV. Not
sure what vtkTextureMapToSphere uses.


> 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?
>

Well are you try to convert to UTM ( I am not sure if vtkGeoAssignCoordinates
will do what you are looking for) ? For your second question  yes you can
use the filter as that would just transform the points (vtkPoints) and not
texture coordinate.

>
>

>
Sent from Mobile Device


> -----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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20101104/617ddae3/attachment.htm>


More information about the vtkusers mailing list