[osg-users] StateSet question

Sebastian Messerschmidt sebastian.messerschmidt at gmx.de
Sun Aug 30 02:39:58 PDT 2015


The more modern approach would be texture-arrays which might outperform 
texture atlas implementation in terms of implementation effort and 
memory bandwidth. It requires all textures to be of the same dimensions.
I'm successfully using this for texture variation on terrain and 
vegetation. Unfortunately you'll have to use the shader pipeline and 
write your own visitor to map the different textures to the instances of 
your geometry by adding an uniform to them or using an attribute (which 
might be a bit better performance-wise as there are no state-changes)

Cheers
Sebastian
--



Trajce Nikolov NICK <trajce.nikolov.nick 
<http://trajce.nikolov.nick>@gmail.com>schrieb:

    Hi Aaron,

    I would do this with texture atlas - all roofs in one large texture
    and map them separately. This is sort of common in database development

    On Sat, Aug 29, 2015 at 11:14 PM, Aaron Andersen<aaron at fosslib.net
    <mailto:aaron at fosslib.net>> wrote:

        Hello,

        Consider if I have a mesh file constructed from 2 geometries: a
        cube, and a pyramid on top of the cube, representing a simple
        house. When I load this house it is pulled into OSG as a single
        Geode composed of 2 Geometry instances.

        I have 2 image files for this house: a brown brick house texture
        and a black shingle texture which can be applied to the 2
        geometries of the house mesh. Now consider if I have 2 more
        textures: a dark grey vinyl siding texture, and a dark green
        metal roof texture. If I keep producing more image files you can
        imagine all the different possibilities I might have in
        constructing a home.

        Now consider if I want to make a row of 25 houses:

        osg::Group * rootOfScene = new osg::Group;

        osg::Node * houseGeode = osgDB::readNodeFile("house-mesh.ext");

        for (int i = 0; i < 25; i++)
        {
             osg::PositionAttitudeTransform * transform = new
        osg::PositionAttitudeTransform;

             transform->setPosition(osg::Vec3d(i * 20.f, 0, 0));
             transform->addChild(houseGeode);

             rootOfScene->addChild(transform);
        }

        What is the most efficient way to apply these different texture
        sets so that I can have a row of houses, each with different
        textures being applied to the cube mesh and the pyramid mesh?

        Any help is greatly appreciated.

        Thank you,
        Aaron
        _______________________________________________
        osg-users mailing list
        osg-users at lists.openscenegraph.org
        <mailto:osg-users at lists.openscenegraph.org>
        http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org




    --
    trajce nikolov nick
    _______________________________________________ osg-users mailing
    list
    osg-users at lists.openscenegraph.orghttp://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20150830/bd3fb031/attachment-0003.htm>


More information about the osg-users mailing list