Hi Vitaliy,

>From your description it's not possible to know what the exact problem is
and therefore it's not possible to suggest ways to resolve the issue.

Is the border part of the 8x8.png image?

Does the current behaviour have the icon displayed at the correct size?

Robert.



On 28 July 2015 at 16:43, Vitaliy Polyakov <[email protected]> wrote:

> Hi,
> I want to draw an icon using texture. My texture image is an image of 8x8
> pixel size. It looks like quadrate without center (center is transparent).
> Border width of this quadrate is one pixel.
> When I moving camera with the mouse - border size of icon changed. It can
> also disappear.
> How can I provide permanent width of quadrate border (1 pixel, as in a
> texture)
> My code to add icon on the scene.
>
>
> Code:
> osg::ref_ptr<osg::Node> createTexture()
> {
> osg::ref_ptr<osg::Image> image = osgDB::readImageFile("8x8.png");
> float width = image->s();
> float height = image->t();
>
> osg::Geometry* geometry = new osg::Geometry;
>
> osg::Vec3Array* verts = new osg::Vec3Array(4);
> (*verts)[0] = osg::Vec3(-width/2.0f, -height/2.0, 0.0f);
> (*verts)[1] = osg::Vec3(width/2.0f, -height/2.0, 0.0f);
> (*verts)[2] = osg::Vec3(width/2.0f, height/2.0, 0.0f);
> (*verts)[3] = osg::Vec3(-width/2.0f,height/2.0, 0.0f);
> geometry->setVertexArray( verts );
>
> osg::Vec2Array* texcoords = new osg::Vec2Array(4);
>
> (*texcoords)[0].set(0.0f, 0.0f);
> (*texcoords)[1].set(width, 0.0f);
> (*texcoords)[2].set(width, height);
> (*texcoords)[3].set(0.0f, height);
>
> geometry->setTexCoordArray(0, texcoords);
>
> osg::Vec4Array* colors = new osg::Vec4Array(1);
> (*colors)[0].set(1,1,1,1);
> geometry->setColorArray( colors );
> geometry->setColorBinding( osg::Geometry::BIND_OVERALL );
>
> geometry->addPrimitiveSet( new osg::DrawArrays(GL_QUADS, 0, 4));
>
> osg::StateSet* stateSet = geometry->getOrCreateStateSet();
>
> osg::TextureRectangle* texture = new osg::TextureRectangle( image );
> texture->setFilter(osg::Texture::MIN_FILTER, osg::Texture::NEAREST);
> texture->setFilter(osg::Texture::MAG_FILTER, osg::Texture::NEAREST);
> stateSet->setTextureAttributeAndModes(0, texture, osg::StateAttribute::ON);
>
> stateSet->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
> stateSet->setAttributeAndModes( new osg::Depth(osg::Depth::ALWAYS,false),
> 1 );
>
> osg::Geode* geode = new osg::Geode;
> geode->addDrawable( geometry );
>
> osg::AutoTransform* at = new osg::AutoTransform;
> at->setAutoScaleToScreen( true );
> at->setAutoRotateMode( osg::AutoTransform::ROTATE_TO_SCREEN );
> at->addChild( geode );
> return at;
> }
>
>
>
> Thank you![/code]
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=64511#64511
>
>
>
>
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to