[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