模仿VTK示例代码做了一个圆柱
写cmake的时候遇到了vtk_module_autoinit无法被解析为命令的错误,查了很久删了重写就没问题了,应该是在复制网页教程时复制了未知的字符
cmake + cpp代码(删改了)
cmake_minimum_required(VERSION 3.16)
project(VTKDemo)
find_package(VTK REQUIRED COMPONENTS
CommonColor
CommonCore
FiltersSources
InteractionStyle
RenderingContextOpenGL2
RenderingCore
RenderingFreeType
RenderingGL2PSOpenGL2
RenderingOpenGL2
)
if(NOT VTK_FOUND)
message("vtk not found")
endif()
add_executable(
HelloWorld
HelloWorld.cpp
)
target_link_libraries(
HelloWorld
PRIVATE
${VTK_LIBRARIES}
)
vtk_module_autoinit(
TARGETS HelloWorld
MODULES ${VTK_LIBRARIES}
)
main.cpp:
这部分代码相比于示例删改很多,没有添加
#include <vtk-9.3/vtkPolyDataMapper.h>
#include <vtk-9.3/vtkRenderWindowInteractor.h>
#include <vtk-9.3/vtkRenderWindow.h>
#include <vtk-9.3/vtkAutoInit.h>
#include <vtk-9.3/vtkNew.h>
#include <vtk-9.3/vtkCylinderSource.h>
#include <vtk-9.3/vtkActor.h>
#include <vtk-9.3/vtkRenderer.h>
#include <vtk-9.3/vtkCamera.h>
//#include <iostream>
int main(int , char*[])
{
vtkNew<vtkCylinderSource> cylinder;
cylinder->SetResolution(8); //默认不写是6
vtkNew<vtkPolyDataMapper> mapper;
mapper->SetInputConnection(cylinder->GetOutputPort());
vtkNew<vtkActor> cylinderActor;
cylinderActor->SetMapper(mapper);
vtkNew<vtkRenderer> renderer;
renderer->AddActor(cylinderActor);
renderer->SetBackground(26, 51, 102);
renderer->ResetCamera();
renderer->GetActiveCamera()->Zoom(1.5);
auto win = vtkRenderWindow::New();
win->SetSize(600, 400);
win->AddRenderer(renderer);
win->SetWindowName("Cylinder");
auto winInt = vtkRenderWindowInteractor::New();
winInt->SetRenderWindow(win);
win->Render();
winInt->Start();
//sleep(100); //防止一闪而过,或者取消上面的注释,然后注释这一行
return EXIT_SUCCESS;
}
效果如下,鼠标交互事件很奇怪,暂时不管
总结
大概分为几步:
1.创建CylinderSource
2.将CylinderSource的数据导入vtkPolyDataMapper
3.用mapper的数据创建vtkActor
4.添加actor至renderer中
5.创建vtkRenderWindow并设置renderer
6.创建vtkRenderWindowInteractor用于鼠标交互(可选)