我的開發環境:
系統:win8.1
QT:5.4.2MinGW版
VTK:6.3
按照教程生成一個球體顯示在,Qt的QVTKWidget控件中,出現如下ERROR:
ERROR: In D:\VTK6.3\VTK-src\Rendering\Core\vtkTextActor.cxx, line 110
vtkTextActor (0509BA90): Failed getting the TextRenderer instance!
解決辦法:
在頭文件中加入VTK_MODULE_INIT(vtkRenderingFreeType),
我估計可能還需要在VTK源文件cmake編譯的時候,將VTK_USE_SYSTEM_FREETYPE設置為ON。
再有,要將類似含有***Actor或含有***Widget類的代碼,比如下面
/***************坐標互動窗件兒開始***************************************/ vtkSmartPointer<vtkAxesActor> axes =vtkSmartPointer<vtkAxesActor>::New(); vtkSmartPointer<vtkOrientationMarkerWidget> widget =vtkSmartPointer<vtkOrientationMarkerWidget>::New(); widget->SetOutlineColor( 0.9300, 0.5700, 0.1300 ); widget->SetOrientationMarker( axes ); //注意style的設置要在axes設置之前 widget->SetInteractor( iren ); widget->SetViewport( 0.0, 0.0, 0.4, 0.4 ); widget->SetEnabled( 1 ); widget->InteractiveOn(); /***************坐標互動窗件兒結束***************************************/
放置在renderWindowInteractor之后設置。比如,在下面的為場景添加坐標窗件兒的程序:
#ifndef INITIAL_OPENGL #define INITIAL_OPENGL #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRenderingOpenGL) VTK_MODULE_INIT(vtkInteractionStyle) VTK_MODULE_INIT(vtkRenderingFreeType) #endif #include <iostream> using namespace std; #include <vtkVersion.h> #include <vtkPolyDataMapper.h> #include <vtkActor.h> #include <vtkRenderWindow.h> #include <vtkRenderer.h> #include <vtkRenderWindowInteractor.h> #include <vtkPolyData.h> #include <vtkSphereSource.h> #include <vtkOrientationMarkerWidget.h> #include <vtkAxesActor.h> #include <vtkPropAssembly.h> #include <vtkSmartPointer.h> #include <vtkProperty.h> #include <vtkInteractorStyleTrackballCamera.h> void myShow(vtkPolyData* aGrid) { vtkSmartPointer<vtkPolyDataMapper> aMapper=vtkSmartPointer<vtkPolyDataMapper>::New(); aMapper->SetInputData(aGrid); aMapper->ScalarVisibilityOn(); vtkSmartPointer<vtkActor> anActor=vtkSmartPointer<vtkActor>::New(); anActor->SetMapper(aMapper); // anActor->GetProperty()->SetRepresentationToWireframe(); anActor->GetProperty()->SetDiffuseColor(1,1,1); anActor->GetProperty()->SetLineWidth(10); anActor->GetProperty()->SetPointSize(10); vtkSmartPointer<vtkRenderer> ren1=vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renWin=vtkSmartPointer<vtkRenderWindow>::New(); ren1->AddActor(anActor); ren1->ResetCamera(); renWin->AddRenderer(ren1); renWin->SetSize(512,512); vtkSmartPointer<vtkRenderWindowInteractor> iren=vtkSmartPointer<vtkRenderWindowInteractor>::New(); iren->SetRenderWindow(renWin); vtkSmartPointer<vtkInteractorStyleTrackballCamera> style=vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New(); iren->SetInteractorStyle(style); /***************坐標互動窗件兒***************************************/ vtkSmartPointer<vtkAxesActor> axes =vtkSmartPointer<vtkAxesActor>::New(); vtkSmartPointer<vtkOrientationMarkerWidget> widget =vtkSmartPointer<vtkOrientationMarkerWidget>::New(); widget->SetOutlineColor( 0.9300, 0.5700, 0.1300 ); widget->SetOrientationMarker( axes ); //注意style的設置要在axes設置之前 widget->SetInteractor( iren ); widget->SetViewport( 0.0, 0.0, 0.4, 0.4 ); widget->SetEnabled( 1 ); widget->InteractiveOn(); /***************坐標互動窗件兒***************************************/ iren->Start(); } int main() { vtkSmartPointer<vtkSphereSource> sphereSource = vtkSmartPointer<vtkSphereSource>::New(); sphereSource->SetCenter(0.0, 0.0, 0.0); sphereSource->SetRadius(1.0); sphereSource->Update(); vtkSmartPointer<vtkPolyData> polydata = vtkSmartPointer<vtkPolyData>::New(); polydata=sphereSource->GetOutput(); myShow(polydata); return 0; }