IDLgrPolygon image map scaling [message #42754] |
Fri, 25 February 2005 11:00  |
b_gom
Messages: 105 Registered: April 2003
|
Senior Member |
|
|
I'm having a bit of trouble with texture maps on a simple rectangular
IDLgrPolygon. I am trying to place a bitmap inside the axes of a custom
plot object. I create an IDLgrPolygon with the proper dimensions, and
add it to the model with my plot. I'm using a texture map so that I can
scale the plot dynamically, and so that it behaves itself in terms of
plotting order. The trouble is that IDL doesn't scale the image
uniformly. See:
http://people.uleth.ca/~brad.gom/texture_map.png
The pattern should be a checkerboard of alternating pixels. Is there
something I am missing? This effect occurs no matter what image
dimensions I use, dimensions of the polygon in data units, or
interpolation.
Brad
|
|
|
Re: IDLgrPolygon image map scaling [message #42925 is a reply to message #42754] |
Mon, 28 February 2005 14:55  |
b_gom
Messages: 105 Registered: April 2003
|
Senior Member |
|
|
Thanks Karl,
problem solved. I misinterpreted the power of two part.
Brad
Karl Schultz wrote:
> On Fri, 25 Feb 2005 11:00:32 -0800, b_gom wrote:
>
>> I'm having a bit of trouble with texture maps on a simple
rectangular
>> IDLgrPolygon. I am trying to place a bitmap inside the axes of a
custom
>> plot object. I create an IDLgrPolygon with the proper dimensions,
and
>> add it to the model with my plot. I'm using a texture map so that I
can
>> scale the plot dynamically, and so that it behaves itself in terms
of
>> plotting order. The trouble is that IDL doesn't scale the image
>> uniformly. See:
>> http://people.uleth.ca/~brad.gom/texture_map.png
>> The pattern should be a checkerboard of alternating pixels. Is
there
>> something I am missing? This effect occurs no matter what image
>> dimensions I use, dimensions of the polygon in data units, or
>> interpolation.
>
> This is *probably* caused by your texture image not having dimensions
that
> are a power of 2. OpenGL has a restriction where texture maps have
to
> have dimensions that are a power of 2. If you use a texture map that
does
> not meet this requirement, IDL resamples the image upwards to the
next
> power of 2 dimensions. This resampling step is probably introducing
the
> aliasing artifacts.
>
> The way around this is to place your texture data into a larger image
that
> has dimensions the next power of 2 higher than your texture data,
leaving
> unused areas in the image. Then use texture coordinates to use only
the
> defined parts of the image.
>
> For example, if your texture data is 500x750, make an image array
that is
> 512x1024 and use it to create your IDLgrImage. Fill the image array
so
> that your texture data fills up the [0:499, 0:749] subset of the
array.
> Use this image as the texture map and set the texture coords
corresponding
> to the rectangle to
>
> [ [0,0], [500./512, 0], [500./512, 750./1024], [0, 750./1024] ].
>
> Note that IDLgrSurface does this sort of thing for you automatically,
so I
> suppose that you could use the surface object instead.
>
> One of my tasks for the next release of IDL is to make the polygon
object
> do this sort of thing automatically as well. But for now, you'll
have to
> do something along the lines I've described here.
>
> Karl
|
|
|
Re: IDLgrPolygon image map scaling [message #42928 is a reply to message #42754] |
Mon, 28 February 2005 09:50  |
Karl Schultz
Messages: 341 Registered: October 1999
|
Senior Member |
|
|
On Fri, 25 Feb 2005 11:00:32 -0800, b_gom wrote:
> I'm having a bit of trouble with texture maps on a simple rectangular
> IDLgrPolygon. I am trying to place a bitmap inside the axes of a custom
> plot object. I create an IDLgrPolygon with the proper dimensions, and
> add it to the model with my plot. I'm using a texture map so that I can
> scale the plot dynamically, and so that it behaves itself in terms of
> plotting order. The trouble is that IDL doesn't scale the image
> uniformly. See:
> http://people.uleth.ca/~brad.gom/texture_map.png
> The pattern should be a checkerboard of alternating pixels. Is there
> something I am missing? This effect occurs no matter what image
> dimensions I use, dimensions of the polygon in data units, or
> interpolation.
This is *probably* caused by your texture image not having dimensions that
are a power of 2. OpenGL has a restriction where texture maps have to
have dimensions that are a power of 2. If you use a texture map that does
not meet this requirement, IDL resamples the image upwards to the next
power of 2 dimensions. This resampling step is probably introducing the
aliasing artifacts.
The way around this is to place your texture data into a larger image that
has dimensions the next power of 2 higher than your texture data, leaving
unused areas in the image. Then use texture coordinates to use only the
defined parts of the image.
For example, if your texture data is 500x750, make an image array that is
512x1024 and use it to create your IDLgrImage. Fill the image array so
that your texture data fills up the [0:499, 0:749] subset of the array.
Use this image as the texture map and set the texture coords corresponding
to the rectangle to
[ [0,0], [500./512, 0], [500./512, 750./1024], [0, 750./1024] ].
Note that IDLgrSurface does this sort of thing for you automatically, so I
suppose that you could use the surface object instead.
One of my tasks for the next release of IDL is to make the polygon object
do this sort of thing automatically as well. But for now, you'll have to
do something along the lines I've described here.
Karl
|
|
|