Hi Robert

thanks a lot, I got it from this mailing list message:

http://www.mail-archive.com/[email protected]/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
<[email protected]> 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
[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


_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to