主要运用vtk中vtkQuadric函数
伪代码
void ModleData::drawParaboloid()
{
float radius = data[7];
float temp = -4 * data[8]; // data[7] 表示焦距
vtkSmartPointer<vtkQuadric>quadric = vtkSmartPointer<vtkQuadric>::New();
quadric->SetCoefficients(1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, temp, 0.0);
//二次函数采样分辨率
vtkSmartPointer<vtkSampleFunction>sample = vtkSmartPointer<vtkSampleFunction>::New();
sample->SetSampleDimensions(40, 40, 20);
sample->SetImplicitFunction(quadric);
double xmin = -radius, xmax = radius,
zmin = 1.0f / temp, zmax = - radius * radius / temp + zmin;
sample->SetModelBounds(xmin, xmax, xmin, xmax, zmin, zmax);
vtkSmartPointer<vtkContourFilter> contourFilter = vtkSmartPointer<vtkContourFilter>::New();
contourFilter->SetInputConnection(sample->GetOutputPort());
contourFilter->GenerateValues(1, 1, 1);
contourFilter->