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