[osg-users] Background image texture rescaling problem

John Steinbis jsteinbis at gmail.com
Wed Sep 12 10:55:21 PDT 2007


For an AR project, I need to render a model with video image as
background. My program is based around osgViewer using osg v2.0. I
found an example for a HUD and with a few changes made it work as
background. The code can be found below.

The code runs ok but there is a problem occurring that I cannot figure
out. Any ideas … ?

When new images are loaded, they are rescaled for some reason. This
adds a noticeable delay, ~250 ms, and distorts the images, which is
not acceptable. Output looks like "Scaling image 'x' from (720,480) to
(512,512)".

To prevent resizing I use "BGTexture->setResizeNonPowerOfTwoHint(false)".
To update an image I use "BGTexture->setImage(newImg)".

Thanks,
John



root->addChild(BGProjectionMatrix);

BGProjectionMatrix->setMatrix(osg::Matrix::ortho2D(0,width,0,height));
BGProjectionMatrix->addChild(BGModelViewMatrix);

BGModelViewMatrix->setMatrix(osg::Matrix::identity());
BGModelViewMatrix->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
BGModelViewMatrix->addChild( BGGeode );

BGTexture->setDataVariance(osg::Object::DYNAMIC);
BGTexture->setResizeNonPowerOfTwoHint(false); // <--
BGTexture->setImage(BGImage);

BGGeode->addDrawable(BGBackgroundGeometry);
BGGeode->setStateSet(BGStateSet);

BGBackgroundVertices->push_back( osg::Vec3( 0, 0, 0) );
BGBackgroundVertices->push_back( osg::Vec3(width, 0, 0) );
BGBackgroundVertices->push_back( osg::Vec3(width, height, 0) );
BGBackgroundVertices->push_back( osg::Vec3( 0, height, 0) );

(*texcoords)[0].set(0.0f,0.0f);
(*texcoords)[1].set(1.0f,0.0f);
(*texcoords)[2].set(1.0f,1.0f);
(*texcoords)[3].set(0.0f,1.0f);

BGcolors->push_back(osg::Vec4(1.0f,1.0f,1.0f,1.0f));
BGnormals->push_back(osg::Vec3(1.0f,1.0f,1.0f));

BGBackgroundGeometry->setTexCoordArray(0,texcoords);
BGBackgroundGeometry->setColorArray(BGcolors);
BGBackgroundGeometry->setColorBinding(osg::Geometry::BIND_OVERALL);
BGBackgroundGeometry->setNormalArray(BGnormals);
BGBackgroundGeometry->setNormalBinding(osg::Geometry::BIND_OVERALL);
BGBackgroundGeometry->addPrimitiveSet(BGBackgroundIndices);
BGBackgroundGeometry->setVertexArray(BGBackgroundVertices);

BGBackgroundIndices->push_back(0);
BGBackgroundIndices->push_back(1);
BGBackgroundIndices->push_back(2);
BGBackgroundIndices->push_back(3);

BGStateSet->setTextureAttributeAndModes(0,BGTexture,osg::StateAttribute::ON);
BGStateSet->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF);
BGStateSet->setRenderingHint( osg::StateSet::TRANSPARENT_BIN );
BGStateSet->setRenderBinDetails( 1, "RenderBin");



More information about the osg-users mailing list