VTK作为医学显示库,得到较多使用。作为较为上层的设计,对OpenGL进行了封装,并且有Windows、Linux、安卓等开发版本,可移植性较强。

不过VES暂时没有编译成功。

以下是嵌入MFC-IDC代码,有个缺陷,暂时没能修改。

代码:

showPointsInVtk(short* &depthImage, int HeightDepth, int WidthDepth,int IDCX)
{ //double arr[3];
vtkPoints * points = vtkPoints::New();
int n = 0; int idx = 0; int Length = 3 * HeightDepth*WidthDepth;
//首先读取点云数据到点表points同时指定点对应的id:
for (int i = 0; i < HeightDepth; ++i){
int LastPixel = i* WidthDepth;
for (int j = 0; j < WidthDepth; ++j){
int y = depthImage[3 * (j + LastPixel)];
int x = depthImage[3 * (j + LastPixel) +1];
int z = depthImage[3 * (j + LastPixel) +2];
points->InsertPoint(n, x, y, z);
n++;
}
}
printf("%d\n", n); vtkPolyVertex * polyvertex = vtkPolyVertex::New();
polyvertex->GetPointIds()->SetNumberOfIds(n); int i = 0; //建立拓扑关系
for (i = 0; i < n; i++){
polyvertex->GetPointIds()->SetId(i, i);
} vtkUnstructuredGrid * grid = vtkUnstructuredGrid::New();
grid->SetPoints(points);
grid->InsertNextCell(polyvertex->GetCellType(),
polyvertex->GetPointIds()); vtkDataSetMapper *map1 = vtkDataSetMapper::New();
map1->SetInputData(grid); vtkActor *actor1 = vtkActor::New();
actor1->SetMapper(map1);
actor1->GetProperty()->SetColor(0.194, 0.562, 0.75); vtkRenderer *ren = vtkRenderer::New();
ren->AddActor(actor1);
ren->SetBackground(0, 0, 0); //renWin和iren分别是vtkWin32OpenGLRenderWindow, vtkWin32RenderWindowInteractor
vtkWin32RenderWindowInteractor *iren = vtkWin32RenderWindowInteractor::New();
vtkWin32OpenGLRenderWindow *win = vtkWin32OpenGLRenderWindow::New();
vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New();
win->Clean();
win->SetSize(480, 360);
win->BordersOn();
win->AddRenderer(ren);
iren->SetRenderWindow(win);
iren->SetInteractorStyle(style); //搭上一个显示用的MFC窗口框架。
CWnd *viewer_Wnd;
viewer_Wnd = this->GetDlgItem(IDCX);
HWND hWnd = (HWND)viewer_Wnd->m_hWnd;
HWND hParent = ::GetParent(hWnd);
//::ShowWindow(hParent, SW_HIDE);
::ShowWindow(hParent, 1);
win->SetParentId(this->m_hWnd); iren->Start(); map1->Delete();
grid->Delete();
actor1->Delete();
polyvertex->Delete(); ren->Delete();
win->Delete();
iren->Delete(); return 1;
}


显示效果:

 注意事项:

使用

iren->Start();

导致renter不能更行,修改为以下代码可以完成动态更新:

把 render和win放在初始对话框初始化,其他代码修改为:

this->win->Render();
//在 对话框初始化时初始化Render
inline int Ciisu2vrMfcsDlg::showPointsInVtkG(short* &depthImage, int HeightDepth, int WidthDepth, int IDCX)
{ //double arr[3];
vtkPoints * points = vtkPoints::New();
int n = 0; int idx = 0; int Length = 3 * HeightDepth*WidthDepth;
//首先读取点云数据到点表points同时指定点对应的id:
for (int i = 0; i < HeightDepth; ++i){
int LastPixel = i* WidthDepth;
for (int j = 0; j < WidthDepth; ++j){
int y = depthImage[3 * (j + LastPixel)];
int x = depthImage[3 * (j + LastPixel) + 1];
int z = depthImage[3 * (j + LastPixel) + 2];//这里压缩四倍是比较好的方法//int z = (depthImage[(j + LastPixel)]) ;
points->InsertPoint(n, x, y, z);
n++;
}
}
vtkPolyVertex * polyvertex = vtkPolyVertex::New();
polyvertex->GetPointIds()->SetNumberOfIds(n);
int i = 0;
//建立拓扑关系
for (i = 0; i < n; i++){
polyvertex->GetPointIds()->SetId(i, i);
} vtkUnstructuredGrid * grid = vtkUnstructuredGrid::New();
grid->SetPoints(points);
grid->InsertNextCell(polyvertex->GetCellType(),
polyvertex->GetPointIds() ); vtkDataSetMapper *map = vtkDataSetMapper::New();
map->SetInputData(grid); vtkActor *actorG = vtkActor::New();
actorG->SetMapper(map);
actorG->GetProperty()->SetColor(0.194, 0.562, 0.75); vtkRenderer *ren = vtkRenderer::New();
ren->AddActor(actorG);
ren->SetBackground(0.13, 0.40, 0.15); this->win->AddRenderer(ren);
this->win->Render();//自己写一个重载-更新函数! map->Delete();
grid->Delete();
actorG->Delete();
polyvertex->Delete(); return 1;
}

后记:

效果还不错,就是和OpenCV结合时有点麻烦,命名空间冲突。

VTK:VTK嵌入MFC成功的更多相关文章

  1. VTK嵌入MFC同步显示

    使用VTK嵌入MFC,实现四视图更新,机制和细节参考原文. 原文链接:http://blog.csdn.net/www_doling_net/article/details/8939115 原文代码: ...

  2. Cocos2d-X 2.2嵌入MFC的子窗口

    1.在cocos2dx目录下创建基于对话框的MFC工程,对话框中间放一个Picture控件 2.添加cocos2dx的相关头文件包含路径.库包含路径和依赖项,可以参考其他cocos工程设置 3.选中P ...

  3. Ogre嵌入MFC傻瓜全然教程(三)

    经过前两两篇博文的解说.我们已经完毕了渲染工作,但仅仅是渲染而没有交互性,本篇博文我们就来加上事件的处理方法. 首先我们须要为项目加入一个帧监听类:CMyFrameListener,为了直观,在这直接 ...

  4. OpenCV第二课,嵌入MFC

    单纯显示图片,只需链接 opencv_core2411d.libopencv_highgui2411d.lib 1.首先创建一个MFC的dlg,添加Picture Control控件 void CCO ...

  5. 编译VTK的MFC库

    原文链接:http://blog.csdn.net/left_la/article/details/7069708 本人做了少量修改! Win7 + VS2010 + CMake2.8.6 + VTK ...

  6. 第01章-欢迎学习VTK

    [译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934- ...

  7. 在windows上安装VTK

    看了很多教程,花了1天半的时间装上了,记录下. 前置条件:我安装了VS2015,用来编译工程. 参考资料 官方:http://www.vtk.org/Wiki/VTK/Building 安装:http ...

  8. 配置vtk(Win8.1 + VS2012+VTK-5.10.1)

    1.下载相关软件 vtk-5.10.1.zip和vtkdata-5.10.1.zip http://www.vtk.org/files/release/5.10/vtk-5.10.1.zip http ...

  9. 我所遭遇过的中间件--VTK

    我所遭遇过的中间件--VTK Vtk是我接触的第一款软件开发包,它引导我对图形学的入门.我是先学的VTK,后学的OpenGL和D3D.VTK是专为图形学开发,特点是接口清晰,好上手,又含有大量的图像处 ...

随机推荐

  1. hadoop在线重启namenode+在线扩展集群

    1.执行步骤 修改dfs.namenode.handler.count=150 () NameNode 有一个工作线程池用来处理客户端的远程过程调用及集群守护进程的调用.处理程序数量越多意味着要更大的 ...

  2. POJ 1416 Shredding Company 回溯搜索 DFS

    Shredding Company Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6173   Accepted: 3361 ...

  3. P1331 海战 洛谷

    题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防海军部仅有很少的几 ...

  4. MySQL Master High Available 理论篇(一)

  5. [转]十五天精通WCF——第五天 你需要了解的三个小技巧

    一: 服务是端点的集合 当你在开发wcf的时候,你或许已经注意到了一个service可以公布多个endpoint,确实是这样,在wcf中有一句很经典的话,叫做“服务是端点的集合",就 比如说 ...

  6. ArcEngine控制台应用程序

    转自wbaolong原文 ArcEngine控制台应用程序 控制台应用程序相比其他应用程序,更加简单,简化了许多冗余,可以让我们更加关注于本质的东西. 现在让我们看一看ArcGIS Engine的控制 ...

  7. UVA 11825 状态压缩DP+子集思想

    很明显的状态压缩思想了.把全集分组,枚举每个集合的子集,看一个子集是否能覆盖所有的点,若能,则f[s]=max(f[s],f[s^s0]+1).即与差集+1比较. 这种枚举集合的思想还是第一次遇到,果 ...

  8. c++ 双冒号的作用

    转:原文:http://www.cnblogs.com/charley_yang/archive/2011/02/24/1964217.html #define FLY 10 #line 100 &q ...

  9. jquery ajax CORS 跨域訪问 WebService

    JS代码: var word = document.getElementById("word").value; $.ajax({ type: "POST", c ...

  10. 怎样使用OpenShare部署和运营企业门户

    怎样使用OpenShare部署和运营企业门户 这篇Blog是偏向企业内总体门户部署和运营的指南,是偏向总体管理和规划的.并非针对终端用户的OpenShare软件操作手冊,详细的操作能够上优酷看相关视频 ...