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

Reply via email to