Hi Florian,
see the attached example. It will load to textures and apply them to two
different sets of texture coordinates.
Simply replace the image file paths to test it.
If you use the 0,0 texture coordinate for all triangle/quad edges you
will, depending on the wrap mode, end up having the image's pixel color
over the whole primitive.
<snip>
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgGA/StateSetManipulator>
osg::Node* createMT_Graph()
{
osg::Geometry* geom = new osg::Geometry;
osg::Vec3Array* vert_array = new osg::Vec3Array;
osg::Vec2Array* uv_array = new osg::Vec2Array;
osg::Vec2Array* uv2_array = new osg::Vec2Array;
osg::Vec3Array* normal_array = new osg::Vec3Array;
osg::Vec4Array* color_array = new osg::Vec4Array;
normal_array->push_back(osg::Vec3(0, 0, 1));
color_array->push_back(osg::Vec4(1, 1, 1, 1));
for (unsigned i = 0; i < 40; ++i)
{
bool even = (0 == i % 2);
float x = (i) / 2;
float y = even ? 0 : 1;
std::cout << x << "," << y << std::endl;
vert_array->push_back(osg::Vec3(x,y,0 ));
uv_array->push_back(osg::Vec2(x, y));
uv2_array->push_back(osg::Vec2(0.5*x, y));
}
geom->setVertexArray(vert_array);
geom->setTexCoordArray(0, uv_array);
geom->setTexCoordArray(1, uv2_array);
geom->setNormalArray(normal_array, osg::Array::BIND_OVERALL);
geom->setNormalArray(color_array, osg::Array::BIND_OVERALL);
geom->addPrimitiveSet(new osg::DrawArrays(GL_TRIANGLE_STRIP,0,
vert_array->size()));
return geom;
}
int main(int argc, char** argv)
{
osgViewer::Viewer viewer;
viewer.addEventHandler( new
osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );
viewer.addEventHandler(new osgViewer::StatsHandler());
osg::Node* node = createMT_Graph();
osg::Texture2D* tex1 = new
osg::Texture2D(osgDB::readImageFile("./resources/textures/ziggis.png"));
tex1->setWrap(osg::Texture::WRAP_S, osg::Texture::REPEAT);
tex1->setWrap(osg::Texture::WRAP_T, osg::Texture::REPEAT);
node->getOrCreateStateSet()->setTextureAttributeAndModes(0, tex1,
osg::StateAttribute::ON);
osg::Texture2D* tex2 = new
osg::Texture2D(osgDB::readImageFile("./resources/textures/wasch.png"));
tex2->setWrap(osg::Texture::WRAP_S, osg::Texture::REPEAT);
tex2->setWrap(osg::Texture::WRAP_T, osg::Texture::REPEAT);
node->getOrCreateStateSet()->setTextureAttributeAndModes(1, tex2,
osg::StateAttribute::ON);
viewer.setUpViewInWindow(10,10,1280,1024, 0);
viewer.setSceneData( node );
return( viewer.run() );
}
</snip>
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org