[osg-users] Using multiples texture for a geometry

Robert Osfield robert.osfield at gmail.com
Tue May 3 01:30:24 PDT 2016


Hi Florian,

Is there a reason your copy and pasted code doesn't assign the texture
coordinate arrays to the geometry?

Robert.

On 2 May 2016 at 21:08, Florian GOLESTIN <florian.golestin at gmail.com> wrote:

> Hi Robert,
>
> Thanks for your response!
>
> I might have the two vectors for the textures coordinate.
> Basically my idea is to have cubes to draw Labyrinth.
> I read a file such as:
>
> Code:
>
> xxxxx
> x.....x
> xxxxx
>
>
>
> Where 'x' represents a wall.
>
> I've a class named Level that hold two Vec2Array for the two textures, it
> also hold vertices and normals.
> What I do is
>  - Even: the first vector is filled with texture coordinates while the
> second is filled with 0
>  - Odd: then the second time the first vector is filled with 0 and the
> second with texture coordinates.
>
> Here is the code:
>
> Code:
>
> float   x = 0;
> float   y = 0;
> int wallCount = 0;
>
> while(std::getline(stream, line))
>       {
>         std::stringstream linestream(line);
>
>         while (linestream >> block)
>           {
>             float posx = 1.0 * x;
>             float posy = 1.0 * y;
>             float endx = posx + 1.0;
>             float endy = posy + 1.0;
>             switch (block)
>               {
>               case 'x':
>                 if (wallCount % 2) // Odd or Even?
>                     createCube(level.get(), *level->texcoords,
> *level->texcoords2, posx, posy, endx, endy);
>                 else
>                     createCube(level.get(), *level->texcoords2,
> *level->texcoords, posx, posy, endx, endy);
>                 wallCount++;
>                 break;
>             x += 1.0;
>           }
>         x  = 0;
>         y -= 1.0; /* We decrements y To keep the labyrinth as on the file
> */
>       }
>
>
>     osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
>     geom->setVertexArray(level->vertices);
>     geom->setNormalArray(level->normals,
> osg::Array::Binding::BIND_PER_VERTEX);
>     geom->addPrimitiveSet(new osg::DrawArrays(GL_QUADS, 0, 24*wallCount));
>     osgUtil::SmoothingVisitor::smooth(*geom);
>
>
>
>   /*
>    * @param Level       the container of the vertices, normals and
> textures for the walls of our labyrinth
>    * @param tex         the Vector that should receive the coordinate for
> the textures
>    * @param skip        the second vector for texture filled with '0' to
> 'skip' this wall
>    */
>   void LevelReader::createCube(Soleil::Level *level, osg::Vec2Array &tex,
> osg::Vec2Array &skip,
>                   float posx, float posy, float endx, float endy) const
> {
>     // ------ Front
>     level->vertices->push_back(osg::Vec3(posx, posy, 0.0f));
>     level->vertices->push_back(osg::Vec3(endx, posy, 0.0f));
>     level->vertices->push_back(osg::Vec3(endx, posy, 1.0f));
>     level->vertices->push_back(osg::Vec3(posx, posy, 1.0f));
>
>     level->normals->push_back(osg::Vec3(0.0f,-1.0f, 0.0f));
>     level->normals->push_back(osg::Vec3(0.0f,-1.0f, 0.0f));
>     level->normals->push_back(osg::Vec3(0.0f,-1.0f, 0.0f));
>     level->normals->push_back(osg::Vec3(0.0f,-1.0f, 0.0f));
>
>     tex.push_back( osg::Vec2(0.0f, 0.0f));
>     tex.push_back( osg::Vec2(0.0f, 1.0f));
>     tex.push_back( osg::Vec2(1.0f, 1.0f));
>     tex.push_back( osg::Vec2(1.0f, 0.0f));
>     //
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>
>
>     // ------ top
>     level->vertices->push_back(osg::Vec3(posx, posy, 1.0f));
>     level->vertices->push_back(osg::Vec3(endx, posy, 1.0f));
>     level->vertices->push_back(osg::Vec3(endx, endy, 1.0f));
>     level->vertices->push_back(osg::Vec3(posx, endy, 1.0f));
>
>     level->normals->push_back(osg::Vec3(0.0f, 0.0f, 1.0f));
>     level->normals->push_back(osg::Vec3(0.0f, 0.0f, 1.0f));
>     level->normals->push_back(osg::Vec3(0.0f, 0.0f, 1.0f));
>     level->normals->push_back(osg::Vec3(0.0f, 0.0f, 1.0f));
>
>     tex.push_back( osg::Vec2(0.0f, 0.0f));
>     tex.push_back( osg::Vec2(0.0f, 1.0f));
>     tex.push_back( osg::Vec2(1.0f, 1.0f));
>     tex.push_back( osg::Vec2(1.0f, 0.0f));
>     //
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>
>
>     // ------ back
>     level->vertices->push_back(osg::Vec3(posx, endy, 0.0f));
>     level->vertices->push_back(osg::Vec3(endx, endy, 0.0f));
>     level->vertices->push_back(osg::Vec3(endx, endy, 1.0f));
>     level->vertices->push_back(osg::Vec3(posx, endy, 1.0f));
>
>     level->normals->push_back(osg::Vec3(0.0f, 1.0f, 0.0f));
>     level->normals->push_back(osg::Vec3(0.0f, 1.0f, 0.0f));
>     level->normals->push_back(osg::Vec3(0.0f, 1.0f, 0.0f));
>     level->normals->push_back(osg::Vec3(0.0f, 1.0f, 0.0f));
>
>     tex.push_back( osg::Vec2(0.0f, 0.0f));
>     tex.push_back( osg::Vec2(0.0f, 1.0f));
>     tex.push_back( osg::Vec2(1.0f, 1.0f));
>     tex.push_back( osg::Vec2(1.0f, 0.0f));
>       //
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>
>
>     // ------ Bottom
>     level->vertices->push_back(osg::Vec3(posx, posy, 0.0f));
>     level->vertices->push_back(osg::Vec3(endx, posy, 0.0f));
>     level->vertices->push_back(osg::Vec3(endx, endy, 0.0f));
>     level->vertices->push_back(osg::Vec3(posx, endy, 0.0f));
>
>     level->normals->push_back(osg::Vec3(0.0f, 0.0f, -1.0f));
>     level->normals->push_back(osg::Vec3(0.0f, 0.0f, -1.0f));
>     level->normals->push_back(osg::Vec3(0.0f, 0.0f, -1.0f));
>     level->normals->push_back(osg::Vec3(0.0f, 0.0f, -1.0f));
>
>     tex.push_back( osg::Vec2(0.0f, 0.0f));
>     tex.push_back( osg::Vec2(0.0f, 1.0f));
>     tex.push_back( osg::Vec2(1.0f, 1.0f));
>     tex.push_back( osg::Vec2(1.0f, 0.0f));
>     //
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>
>
>     // ------ Left
>     level->vertices->push_back(osg::Vec3(posx, posy, 0.0f));
>     level->vertices->push_back(osg::Vec3(posx, endy, 0.0f));
>     level->vertices->push_back(osg::Vec3(posx, endy, 1.0f));
>     level->vertices->push_back(osg::Vec3(posx, posy, 1.0f));
>
>     level->normals->push_back(osg::Vec3(-1.0f, 0.0f, 0.0f));
>     level->normals->push_back(osg::Vec3(-1.0f, 0.0f, 0.0f));
>     level->normals->push_back(osg::Vec3(-1.0f, 0.0f, 0.0f));
>     level->normals->push_back(osg::Vec3(-1.0f, 0.0f, 0.0f));
>
>     tex.push_back( osg::Vec2(0.0f, 0.0f));
>     tex.push_back( osg::Vec2(0.0f, 1.0f));
>     tex.push_back( osg::Vec2(1.0f, 1.0f));
>     tex.push_back( osg::Vec2(1.0f, 0.0f));
>       //
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>
>
>     // ------ Right
>     level->vertices->push_back(osg::Vec3(endx, posy, 0.0f));
>     level->vertices->push_back(osg::Vec3(endx, endy, 0.0f));
>     level->vertices->push_back(osg::Vec3(endx, endy, 1.0f));
>     level->vertices->push_back(osg::Vec3(endx, posy, 1.0f));
>
>     level->normals->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));
>     level->normals->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));
>     level->normals->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));
>     level->normals->push_back(osg::Vec3(1.0f, 0.0f, 0.0f));
>
>     tex.push_back( osg::Vec2(0.0f, 0.0f));
>     tex.push_back( osg::Vec2(0.0f, 1.0f));
>     tex.push_back( osg::Vec2(1.0f, 1.0f));
>     tex.push_back( osg::Vec2(1.0f, 0.0f));
>     //
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>     skip.push_back( osg::Vec2(0.0f, 0.0f));
>
>   }
>
>
>
>
> Thanks,
> Florian
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=67041#67041
>
>
>
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://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/20160503/896f376a/attachment-0002.htm>


More information about the osg-users mailing list