Hi,
Prior to v3.0, I had a textured plane in my application. Since then (and
perhaps the two aren't related, but...) my textured plane displays as more of a
fuzzy checkerboard than the texture that I assigned. It must be something
simple that I have done wrong. I've included my setup code below...a quick
code review would be appreciated!
Thank you!
Cheers,
John
Code:
{
this->_switch = new osg::Switch();
this->_transform = new osg::PositionAttitudeTransform;
this->_transform->setScale(this->_scale);
this->_transform->setPosition(this->_position);
// Setup the texture
osg::Image* const image = osgDB::readImageFile(this->_textureFile);
if(image != NULL)
{
image->setDataType(GL_ALPHA);
image->setPixelFormat(GL_ALPHA);
this->_texture = new osg::Texture2D(image);
this->_texture->setBorderColor(osg::Vec4(0, 0, 0, 0));
this->_texture->setBorderWidth(0);
this->_texture->setWrap(osg::Texture2D::WRAP_S, osg::Texture2D::MIRROR);
this->_texture->setWrap(osg::Texture2D::WRAP_T, osg::Texture2D::MIRROR);
this->_texenv = new osg::TexEnv();
this->_texenv->setMode(osg::TexEnv::MODULATE);
}
// Build the geometry to texture
osg::Group* const group = new osg::Group;
const float sizeUnit = 50000;
const float sizeUnitMultiplier = 8.0f;
const float sizeFinal = sizeUnit * sizeUnitMultiplier;
const float sizeTexture = sizeUnitMultiplier * 0.25f;
// left hand side of bounding box.
osg::Vec3 top_left(-sizeFinal, sizeFinal, altitude);
osg::Vec3 bottom_left(-sizeFinal, -sizeFinal, altitude);
osg::Vec3 bottom_right(sizeFinal, -sizeFinal, altitude);
osg::Vec3 top_right(sizeFinal, sizeFinal, altitude);
osg::Vec3 center(0, 0, 0);
osg::Geometry* const geom = new osg::Geometry;
osg::Vec3Array* const vertices = new osg::Vec3Array(4);
(*vertices)[0] = top_left;
(*vertices)[1] = bottom_left;
(*vertices)[2] = bottom_right;
(*vertices)[3] = top_right;
geom->setVertexArray(vertices);
osg::Vec2Array* const texcoords = new osg::Vec2Array(4);
(*texcoords)[0].set(0.0f, sizeTexture);
(*texcoords)[1].set(0.0f, 0.0f);
(*texcoords)[2].set(sizeTexture, 0.0f);
(*texcoords)[3].set(sizeTexture, sizeTexture);
geom->setTexCoordArray(0,texcoords);
osg::Vec3Array* const normals = new osg::Vec3Array(1);
(*normals)[0].set(0.0f,0.0f,1.0f);
geom->setNormalArray(normals);
geom->setNormalBinding(osg::Geometry::BIND_OVERALL);
osg::Vec4Array* const colors = new osg::Vec4Array(1);
(*colors)[0].set(this->_color[0], this->_color[1], this->_color[2],
this->_color[3]);
geom->setColorArray(colors);
geom->setColorBinding(osg::Geometry::BIND_OVERALL);
geom->addPrimitiveSet(new osg::DrawArrays(GL_QUADS,0,4));
osg::Geode* const geom_geode = new osg::Geode;
geom_geode->addDrawable(geom);
// set up the texture state.
this->_texture->setDataVariance(osg::Object::STATIC);
osg::StateSet* stateset = geom->getOrCreateStateSet();
stateset->setTextureAttributeAndModes(0, this->_texture.get(),
osg::StateAttribute::ON);
stateset->setMode(GL_BLEND, osg::StateAttribute::ON);
stateset->setTextureAttribute(0, this->_texenv.get());
stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
osg::PolygonMode* const polymode = new osg::PolygonMode;
polymode->setMode(osg::PolygonMode::FRONT_AND_BACK, osg::PolygonMode::FILL);
stateset->setAttributeAndModes(polymode, osg::StateAttribute::OVERRIDE |
osg::StateAttribute::ON);
group->addChild(geom_geode);
this->_transform->addChild(group);
this->_switch->addChild(this->_transform.get());
}
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=44306#44306
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org