Johannes,

If you just want to triangulate an outline, try the
osgUtil::Tessellator. First build an osg::Geometry as a line loop,
then do something like:

osgUtil::Tessellator tess;
tess.setTessellationType( osgUtil::Tessellator::TESS_TYPE_GEOMETRY );
tess.setWindingType( osgUtil::Tessellator::TESS_WINDING_POSITIVE );
tess.retessellatePolygons( *geometry );


Glenn Waldron : Pelican Mapping : http://pelicanmapping.com : +1.703.652.4791



On Tue, Sep 1, 2009 at 2:30 PM, Johannes Schüth<[email protected]> wrote:
> Hi,
>
> i want to triangulate the following U character like shape.
> [Image: http://jotschi.de/download/osg/delaunay_3.png ]
>
> The DelaunayTriangulator generates this triangulated mesh. But as you can see 
> the space in the middle of the U is also triangulated which i do not want.
> [Image: http://jotschi.de/download/osg/delaunay_2.png ]
>
> So i tried the DelaunayConstraint to add a constraint for all edges. 
> Obviously i have no clue how to do this but i attach the image anyway. This 
> doesn't seem to work:
> [Image: http://jotschi.de/download/osg/delaunay_1.png ]
>
> I used the following code:
>
> Code:
>
> osg::Group* root = new osg::Group();
>
> osg::Vec3Array* v = new osg::Vec3Array;
> v->resize(16);
>
> //U
> (*v)[0].set(500, 250, 0);
> (*v)[1].set(500, 1000, 0);
>
> (*v)[2].set(500, 1000, 0);
> (*v)[3].set(1300, 1000, 0);
>
> (*v)[4].set(1300, 1000, 0);
> (*v)[5].set(1300, 250, 0);
>
> (*v)[6].set(1300, 250, 0);
> (*v)[7].set(1200, 250, 0);
>
> (*v)[8].set(1200, 250, 0);
> (*v)[9].set(1200, 900, 0);
>
> (*v)[10].set(1200, 900, 0);
> (*v)[11].set(650, 900, 0);
>
> (*v)[12].set(650, 900, 0);
> (*v)[13].set(650, 200, 0);
>
> (*v)[14].set(650, 200, 0);
> (*v)[15].set(500, 250, 0);
>
>
>
> osg::ref_ptr<osgUtil::DelaunayTriangulator> trig =
> new osgUtil::DelaunayTriangulator();
> trig->setInputPointArray(v);
>
>
>
> osg::ref_ptr<osgUtil::DelaunayConstraint> constraint =
> new osgUtil::DelaunayConstraint;
>
> constraint->setVertexArray(v);
> constraint->addPrimitiveSet(new osg::DrawArrays(
> osg::PrimitiveSet::LINE_LOOP, 0, 3));
> trig->addInputConstraint(constraint.get());
>
>
> trig->triangulate();
> trig->removeInternalTriangles(constraint.get());
>
> osg::Geometry* gm = new osg::Geometry;
> gm->setVertexArray(v);
> gm->addPrimitiveSet(trig->getTriangles());
> osg::Vec4Array* colors = new osg::Vec4Array(1);
> colors->push_back(osg::Vec4(1, 0, 1, 1));
> gm->setColorArray(colors);
> gm->setColorBinding(osg::Geometry::BIND_OVERALL);
> osg::Geode* geode = new osg::Geode();
> geode->addDrawable(gm);
>
> // you do not need this function call to use this example
> //forcedWireFrameModeOn(root);
>
> root->addChild(geode);
>
> /*
> int nEdges = 16;
> int i = 0;
> while (i < nEdges) {
>
> osg::Vec4 c = osg::Vec4(1., 1., 1., 1.);
> root->addChild(drawEdge(c, (*v)[i], (*v)[i + 1]));
>
> i += 2;
> }
> */
>
>
>
> Do you have any idea how to solve this problem? I just want to get a 
> triangulated mesh from the imput of a shapes outline. (The input is not a 
> point cloud)
>
> Thank you!
>
> Cheers,
> Johannes
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=16927#16927
>
>
>
>
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to