[osg-users] Texture wrapping for a geometry object
Dominic Stalder
dominic.stalder at bluewin.ch
Mon Nov 23 01:09:26 PST 2009
Hi Robert
thanks a lot, I got it from this mailing list message:
http://www.mail-archive.com/osg-users@openscenegraph.net/msg11209.html
I will try the texture coordinates scaling. But just for interesting,
how would the texture matrix work, do you have some basic code snippet?
Regards
Dominic
Robert Osfield schrieb:
> Hi Dominc,
>
> I don't know where you might have got the impression that you can't
> set up texture repeats with geometry - you just using texture
> coordinates beyond the 0.0 to 1.0 range and you'll get repeats.
> Another way is to use a texture matrix to up the tex coords from 0.0
> to 1.0 range to what you want.
>
> Robert.
>
> On Sun, Nov 22, 2009 at 3:28 PM, Dominic Stalder
> <dominic.stalder at bluewin.ch> wrote:
>
>> Hi there
>>
>> I would like to wrap (repeated) my texture image on a geometry object. I
>> read somewhere, that this is not possible directly on the geometry, but how
>> can I do it otherwise? Here is my code:
>>
>> /*
>> * creates the ground geometry
>> */
>> // creates the vertices array
>> ref_ptr<Vec3Array> verticesGround = new Vec3Array;
>> verticesGround->push_back(Vec3(-WORLD_INFINITY, 0.0, -WORLD_INFINITY)); //
>> back left
>> verticesGround->push_back(Vec3(WORLD_INFINITY, 0.0, -WORLD_INFINITY)); //
>> back right
>> verticesGround->push_back(Vec3(WORLD_INFINITY, 0.0, WORLD_INFINITY)); //
>> front right
>> verticesGround->push_back(Vec3(-WORLD_INFINITY, 0.0, WORLD_INFINITY)); //
>> front left
>> // creates the normal array
>> ref_ptr<Vec3Array> normalsGround = new Vec3Array;
>> normalsGround->push_back(Vec3(0.0, 1.0, 0.0));
>> // creates the texture coordinates array
>> ref_ptr<Vec2Array> texCoordGround = new Vec2Array;
>> texCoordGround->push_back(Vec2(0.0, 0.0));
>> texCoordGround->push_back(Vec2(1.0, 0.0));
>> texCoordGround->push_back(Vec2(1.0, 1.0));
>> texCoordGround->push_back(Vec2(0.0, 1.0));
>> // loads the texture image
>> ref_ptr<Image> imgGrass =
>> osgDB::readImageFile(Utilities::filePath("res/osg/grass.png").toStdString());
>> // attaches the image to the texture
>> ref_ptr<Texture2D> texGround = new Texture2D;
>> texGround->setDataVariance(Object::DYNAMIC);
>> texGround->setWrap(Texture::WRAP_S, Texture::REPEAT);
>> texGround->setWrap(Texture::WRAP_T, Texture::REPEAT);
>> texGround->setImage(imgGrass.get());
>> // releases the image after applying
>> texGround->setUnRefImageDataAfterApply(true);
>> // creates the geometry
>> ref_ptr<Geometry> geomGround = new Geometry;
>> geomGround->setVertexArray(verticesGround.get());
>> geomGround->setNormalArray(normalsGround.get());
>> geomGround->setTexCoordArray(0, texCoordGround.get());
>>
>> // adds the primitive set to the geometry
>> geomGround->addPrimitiveSet(new DrawArrays(PrimitiveSet::QUADS, 0, 4));
>> // enables all the necessary states for the ground geometry node
>> ref_ptr<StateSet> stateGroundGeometry = geomGround->getOrCreateStateSet();
>> stateGroundGeometry->setTextureAttributeAndModes(0, texGround.get(),
>> StateAttribute::ON);
>>
>> // creates the geode
>> ref_ptr<Geode> geoGround = new Geode;
>> geoGround->addDrawable(geomGround.get());
>>
>> Thanks a lot in advance!
>>
>> Best regards
>> Dominic
>> _______________________________________________
>> osg-users mailing list
>> osg-users at lists.openscenegraph.org
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
More information about the osg-users
mailing list