[info-performer] One more tessellation problem

Date view Thread view Subject view Author view

From: Jaroslav Sinecky (jsinecky++at++tiscali.cz)
Date: 04/05/2004 04:38:56


Hi all,

/* I'm sending this again because it seems the first mail didn't make it
through. I'm putting link to piece.pfb instead of attaching it. Sorry if it
arrives twice at the end. */

I'm using the performer tessellator exhaustively, it works mostly well, but
there are cases when I get some uncorrect artifacts. Its usually tedious to
track where the problem actually is and can be also in surfaces/trim curves
definitions. Anyway I have one case which is quite transparent (and visualy
more enoying), I would be glad if someone can have a look at it...

I send a piece.pfb enclosed with two pfNurbSurfaces, in the uv-parametrical
space each has a simple trim loop in form of unit square (0,0)->(1,1). Now
when I load this file, add topological information (the two surfaces have
one common boundary) and tessellate it, there is a very visible tessellation
artifact.
Note: this happens only with common boundary defined and only for some
concrete chordal tolerance values.

Jaroslav

ps. Pf3.1, Windows XP.

Here is the code:

        // Load the file and get two surfaces
        pfGroup* root = (pfGroup*)pfdLoadFile("piece.pfb");
        pfParaSurface* surf1 = (pfParaSurface*)root->getChild(0);
        pfParaSurface* surf2 = (pfParaSurface*)root->getChild(1);

        // Add topology
        pfTopo* topo = new pfTopo();
        topo->addSurface(surf1);
        topo->addSurface(surf2);

        // Common boudary
        pfBoundary* b = new pfBoundary();
        topo->addBoundary(b);
        b->addEdge(0, surf1, 0, 0);
        b->addEdge(1, surf2, 0, 2);
        surf1->getTrimCurve(0, 0)->setBoundaryDir(1);
        surf2->getTrimCurve(0, 2)->setBoundaryDir(-1);

        // Tessellate
        pfTessParaSurfaceAction* tessSurf = new pfTessParaSurfaceAction();
        tessSurf->setChordalDevTol(5e-5f); // With these values, all is ok:
5e-4f, 5e-6f
        pfdTessellateGeometry(root, tessSurf);

        // Now can store and open in perfly to see what happened
        pfdStoreFile(root, "simple.pfb");

the link to piece.pfb: http://home.tiscali.cz/pusher/piece.pfb


Date view Thread view Subject view Author view

This archive was generated by hypermail 2b29 : Mon Apr 05 2004 - 04:43:37 PDT