Hi,

AFAIK sampling in OpenGL occurs at pixel centers. That would explain your "quarter" effect.

As for the inconsistency in the center of the output, I can only speculate.

Things I would try:
Use TextureRectangle instead of normal texture (coordinates are then closer to pixel values) Try various output sizes to see if it is a sampling/math problem in the card implementation.
Use a shader to do the sampling to see what is going wrong where.

jp

Guy wrote:
Hello,

 I have a problem with GL_LINEAR filtering of a float texture.

I created a 2D float image with the values

100 100

200 200

I stretched this image over 300x300 float buffer.

The results are defiantly not a linear interpolation of these values.

   1. The upper and lower quarters of the image are constants. The
      constant value is the value that should have been only in the
      upper most and lower most rows. It seems the interpolation of a
      pixel with 0.001 coordinates for example, takes into consideration
      values with negative texture coordinates. (I can't find any other
      explanation).
   2. Between these quarters, the image SEEMS to be linearly
      interpolated, but it is not. I would expect the differences
      between two sequential pixels to be constant, but the differences
      are not the same.

I had this problem both with OSG1.2 and OSG2.0. I don't believe it has anything to do with the OSG code, but with the hardware implementation.

I used the following code to create the texture:

                  image->setImage(  width,

                                    height,

                                    1,

                                    GL_RGBA16F_ARB,

                                    GL_RGBA,

                                    GL_FLOAT,

(unsigned char*)(new float[4*width*height]),

                                    osg::Image::USE_NEW_DELETE);

                  osg::Texture2D* rtexture = new osg::Texture2D;

//------------------------------------------------------------------------

                  // make the texture float texture

//------------------------------------------------------------------------

                  rtexture->setInternalFormat(GL_RGBA16F_ARB);

rtexture->setWrap(osg::Texture2D::WRAP_S, osg::Texture2D::CLAMP_TO_EDGE);

rtexture->setWrap(osg::Texture2D::WRAP_T, osg::Texture2D::CLAMP_TO_EDGE);

rtexture->setFilter(osg::Texture2D::MIN_FILTER,osg::Texture2D::LINEAR);

rtexture->setFilter(osg::Texture2D::MAG_FILTER,osg::Texture2D::LINEAR);

                  rtexture->setSourceFormat(GL_RGBA);

                  rtexture->setSourceType(GL_FLOAT);

//========================================================================

                  rtexture->setImage(image);

                  rtexture->setTextureSize(image->s(), image->t());

                  rtexture->setResizeNonPowerOfTwoHint(false);

I also tried it with 32 bit float image.

I'm using windows XP and nvidia 8800.

Any ideas how to apply a true linear mapping for textures?

Thanks,

 Guy.


------------------------------------------------------------------------

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

--
This message is subject to the CSIR's copyright terms and conditions, e-mail legal notice, and implemented Open Document Format (ODF) standard. The full disclaimer details can be found at http://www.csir.co.za/disclaimer.html.

This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean. MailScanner thanks Transtec Computers for their support.

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to