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.goles...@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@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >
_______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org