[vtkusers] artifacts while rendering 3d surface
Tim Hutton
T.Hutton at eastman.ucl.ac.uk
Thu Jun 26 11:53:10 EDT 2003
Hi Ajit,
vtkSurfaceReconstructionFilter doesn't work terribly well I'm afraid. It
needs the surface to be densely-sampled and quite noise-free. It also
requires that the surface be closed (and probably some other things as
well). There are some well-documented cases showing similar results to
yours at:
http://archive.ncsa.uiuc.edu/People/heiland/vtk/scatter/sphere/
You can try vtkPowerCrustSurfaceReconstruction, it works much better:
http://www.eastman.ucl.ac.uk/~thutton/powercrust/
Tim.
At 23:33 25/06/2003 +0530, Ajit Rajwadé wrote:
>Sorry....forgot to attach the file
>
>
>Hello,
>
>I am using the following piece of code to render a 3D surface given the
>X,Y,Z coordinates of several equi-sampled points of the surface . While
>rendering the surface, I get very weird artifacts. For instance, here is
>an attached file that contains a rendered sphere. I am unable to trace
>the bug, what could the cause be?
>
>The code is here:
>
> // Read all the vertices into an ARRAY called "mean"
>
> vtkRenderer *ren = vtkRenderer::New();
> vtkRenderWindow *renWin = vtkRenderWindow::New();
> renWin->AddRenderer(ren);
> renWin->SetSize (300,300);
>
> vtkRenderWindowInteractor *iren =
> vtkRenderWindowInteractor::New();
> iren->SetRenderWindow(renWin);
>
> //Inserting points one by one
> vtkPoints *meanPoints = vtkPoints::New();
> for (i=0;i<SIZE;i++)
> {
> point[0] = Mean[i][0];
> point[1] = Mean[i][1];
> point[2] = Mean[i][2];
> meanPoints->InsertNextPoint(point);
> }
>
> // Create a data set. Load the starting points
> vtkPolyData *inputDataSet = vtkPolyData::New();
> inputDataSet->SetPoints(meanPoints);
>
> // Construct the surface
> vtkSurfaceReconstructionFilter *surf =
> vtkSurfaceReconstructionFilter::New();
> surf->SetInput(inputDataSet);
> printf ("\nSurface construction done...");
>
> // Create isosurface (contour value of 0)
> vtkContourFilter *cf = vtkContourFilter::New();
> cf->SetInput(surf->GetOutput());
> cf->SetValue(0,0.0);
>
> // PolyNormals Filter to obtain normals for "Smooth Shading"
> vtkPolyDataNormals *bNormals = vtkPolyDataNormals::New();
> bNormals->SetInput(cf ->GetOutput());
> //bNormals->SetFeatureAngle(180.0);
>
> // Creates Triangle strips from the Iso-surface
> vtkStripper *bStripper = vtkStripper::New();
> bStripper->SetInput(bNormals->GetOutput());
>
> // Create the mapper and actor and finish up the
> visualization pipeline
> vtkPolyDataMapper *map = vtkPolyDataMapper::New();
> map->SetInput(bStripper->GetOutput());
> map->ScalarVisibilityOff();
> //map->ImmediateModeRenderingOn ();
>
> cout << "Mapper construction done..." << endl;
>
> vtkActor *surfaceActor = vtkActor::New();
> surfaceActor->SetMapper( map );
> surfaceActor->GetProperty()->SetDiffuseColor( 1.0000,
> 0.3882, 0.2784 );
> surfaceActor->GetProperty()->SetSpecularColor( 1, 1, 1 );
> surfaceActor->GetProperty()->SetSpecular(0.4);
> surfaceActor->GetProperty()->SetSpecularPower(50);
>
> ren->AddActor(surfaceActor);
> ren->SetBackground(1,1,1);
> cout << "Surface actor construction done..." << endl;
>
> // Interact with data
> renWin->Render();
> iren->Initialize ();
> iren->Start ();
>
> printf ("\nPress any key");
> scanf ("%d", &choice);
>
> // Clean up
> ren->RemoveActor (surfaceActor);
> meanPoints->Delete();
> inputDataSet->Delete();
> surf->Delete();
> cf->Delete();
> map->Delete();
> surfaceActor->Delete();
> ren->Delete();
> renWin->Delete();
> //iren->Delete ();
>
>_________________________________________________________________
>MSN Search, le moteur de recherche qui pense comme vous !
>http://search.msn.fr/worldwide.asp
>
>
More information about the vtkusers
mailing list