Hi, Zachary first thing: your texture clamping setup is wrong you should use WRAP_T instead of WRAP_R in first line second: overlapping means that your texture coords generation provides incorrect output, cant say much more as i have no idea what your model are
Cheers, Sergey. 16.03.2012, 00:59, "Zachary Hilbun" <osgfo...@tevs.eu>: > Hi, > > I am texturing a disk (circle) I created with a square texture. The texture > has a transparent background so any parts of it that don't overlap the disk > and hang over the sides are transparent. > > The code that does this is below. The Geode circleGeodeImage has been > previously created and added to the scene, but does not have a texture on it > until the code below does that. > > When this is displayed, the image is on the disk as it should be, but it is > repeated multiple times in the -Z (down the screen) direction. The repeated > image overlaps itself so that the 2nd image starts about 25% from the top of > the disk and overlaps the 75% of the disk below that, and the 3rd image > starts about 50% from the top, etc.. So the top 25% is OK, the the > overlapping is happening below that. > > I looked at the texture and verticies that are being used and they look > correct to me. > > I tried clamping it to see what happened, but it made no differnce. > > osg::ref_ptr<osg::Image> image = osgDB::readImageFile > ("jet_fighter3-nobackground.png"); > if ( ! image) > { > QMessageBox::critical (NULL, QObject::tr ("Image file is missing"), > QObject::tr ("jet_fighter3-nobackgroundof.png")); > return 1; > } > > osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D (image.get ()); > > osg::ref_ptr<osg::Vec2Array> texcoords = new osg::Vec2Array; > > osg::Drawable *pDrawable = circleGeodeImage->getDrawable (0); > osg::Geometry *geom = pDrawable->asGeometry (); > osg::Vec3 *pVertex = (osg::Vec3 *) geom->getVertexArray (); > > int vertCount = 0; > > for (osg::Vec3Array::iterator iVertex = pVertexs->begin (); iVertex != > pVertexs->end (); ++iVertex) > { > float xVertex = iVertex->x (); > float zVertex = iVertex->z (); > float x = (xVertex + 1.) / 2.; > float y = (zVertex + 1.) / 2.; > > std::cout << "Map vertex " << xVertex << ", " << zVertex << " to > texture " << x << ", " << y << std::endl; > texcoords->push_back (osg::Vec2 (x, y)); > vertCount++; > } > > geom->setTexCoordArray (0, texcoords.get ()); > texture->setWrap (osg::Texture::WRAP_R, osg::Texture::CLAMP); > texture->setWrap (osg::Texture::WRAP_S, osg::Texture::CLAMP); > > translateNodeDiskRotate->getOrCreateStateSet ()->setTextureAttributeAndModes > (0, texture.get (), osg::StateAttribute::ON); > > Thank you! > > Cheers, > Zachary > > ------------------ > Read this topic online here: > http://forum.openscenegraph.org/viewtopic.php?p=46319#46319 > > _______________________________________________ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org