GeometryPtr createGeo(UInt32 mat) { GeoIndicesPtr ind = _ind[mat]; FDEBUG(("CreateGeoRec::createGeo: Mat %d: %d inds (%d tris)\n", mat, ind->getSize(), ind->getSize()/3)); endEditCP(ind); GeometryPtr geo = Geometry::create(); GeoPLengthsUI32Ptr len = GeoPLengthsUI32::create(); beginEditCP(len); len->push_back(ind->getSize()); endEditCP(len); GeoPTypesUI8Ptr typ = GeoPTypesUI8::create(); beginEditCP(typ); typ->push_back(GL_TRIANGLES); endEditCP(typ); beginEditCP(geo); if(random_color) { SimpleMaterialPtr mat = SimpleMaterial::create(); beginEditCP(mat); Color3f c( drand48() * .7f + .3f, drand48() * .7f + .3f, drand48() * .7f + .3f); mat->setDiffuse(c); mat->setSpecular(Color3f(1.f,1.f,1.f)); mat->setShininess(10.f); endEditCP(mat); geo->setMaterial(mat); } else { geo->setMaterial(MaterialPool::getMaterial(mat)); } geo->setPositions(_pos); geo->setIndices(ind); geo->setLengths(len); geo->setTypes(typ); geo->getIndexMapping().push_back(Geometry::MapPosition); endEditCP(geo); calcVertexNormals(geo); //calcFaceNormals(geo); createSingleIndex(geo); return geo; }