#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkJPEGReader.h>
#include <vtkMarchingCubes.h>
#include <vtkStripper.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkSmartPointer.h>
#include <vtkStringArray.h>
#include <vtkImageLuminance.h>
void main()
{
//生成图像序列的文件名数组
vtkSmartPointer<vtkStringArray > fileArray = vtkSmartPointer<vtkStringArray >::New();
char fileName[128];
for (int i = 1; i <= 200; i++) //几个图像就循环几次
{
sprintf(fileName, "d:/jpg/img-%03d.jpg", i);
vtkStdString fileStr = (vtkStdString)(fileName);
fileArray->InsertNextValue(fileStr);
}
//读取JPG序列图像
vtkSmartPointer<vtkJPEGReader>reader = vtkSmartPointer<vtkJPEGReader>::New();
reader->SetFileNames(fileArray);
reader->Update();
//需要转为灰度图再进行Marching Cube
vtkSmartPointer<vtkImageLuminance> lumFilter = vtkSmartPointer<vtkImageLuminance>::New();
lumFilter->SetInputConnection(reader->GetOutputPort());
lumFilter->Update();
//抽取等值面信息
vtkSmartPointer<vtkMarchingCubes> mc = vtkSmartPointer<vtkMarchingCubes>::New();
mc->SetInputConnection(lumFilter->GetOutputPort());
mc->SetValue(0, 100); //设置提取的等值信息
mc->Update();
//剔除旧的或废除的数据单元,提高绘制的速度(可略去这一步)
vtkSmartPointer<vtkStripper> stripper = vtkSmartPointer<vtkStripper>::New();
stripper->SetInputData(mc->GetOutput());
stripper->Update();
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(stripper->GetOutput());
mapper->ScalarVisibilityOff();
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->GetProperty()->SetDiffuseColor(1, 0.19, 0.15);
actor->GetProperty()->SetSpecular(0.1);
actor->GetProperty()->SetSpecularPower(10);
actor->GetProperty()->SetColor(0.5, 0.5, 0.5);
vtkSmartPointer<vtkRenderer> render = vtkSmartPointer<vtkRenderer>::New();
render->AddActor(actor);
render->SetBackground(1.0, 1.0, 1.0);
vtkSmartPointer<vtkRenderWindow> rw = vtkSmartPointer<vtkRenderWindow>::New();
rw->AddRenderer(render);
rw->SetSize(640, 480);
rw->Render();
rw->SetWindowName("Marching cube");
vtkSmartPointer<vtkRenderWindowInteractor> rwi = vtkSmartPointer<vtkRenderWindowInteractor>::New();
rwi->SetRenderWindow(rw);
vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
rwi->SetInteractorStyle(style);
rwi->Initialize();
rwi->Start();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧