[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