Posts Tagged ‘OSG’

虚拟手术DEMO

我用OSG做的虚拟手术的演示,虽然很粗糙,但也能够实现下面的功能了:

  • 实现从影像设备上采集到DICOM格式的影像数据的功能。
  • 实现从采集到的DICOM格式中提取相关数据,转换为虚拟手术系统内部格式的功能。
  • 实现DICOM数据的2D显示功能,完成重采样、去噪点等图像学算法以提高图像质量。
  • 实现图像的2D和3D分割,完成区域生长、Snake算法等的研究,实现仅需要少量人工介入就能将病变组织自动提取的功能。
  • 实现了对感兴趣的组织进行标注和分离,并能够建立实时的3D立体模型。
  • 重点研究和实现了高质量的实时光线追踪算法的三维重建算法,在此基础之上,研究出了如何将该算法和常规的光栅渲染图形进行混合的方法。
  • 掌握了基于组织的三维立体切割方法。
  • 掌握了真三维立体显示的关键技术,使最终的成像不局限于显示器的平面2D环境,达到一种触手可及的感受,具有很强的立体效果和沉溺感。

目前用OSG来做我看已经到了一种无法收场的局面了, Read more

如何用Shader得到物体的世界坐标

最近群里面有个朋友问我关于如何得到OpenGL世界坐标的问题,当时我还弄错了,误以为gl_ModelViewMatrix*gl_Vertex就是世界坐标。因最近也突然遇到了世界坐标的问题,所以花了一些时间来研究这个问题,网上也有人问,但或许没有答案,或许是错的。
其实,OpenGL的转换管道直接将gl_Vertex,也就是物体坐标,用gl_ModelViewMatrix相乘,得到的是眼坐标。如果将gl_ModelViewMatirx拆分为gl_ModelMatrix和gl_ViewMatrix,那么问题就好解决了。但事实上没有提供。要清楚OpenGL其实没有世界坐标系,世界坐标系是应用程序的概念。其实可以将OpenGL的摄像机看作是固定的,其坐标系就是眼坐标系, Read more

GPU体素化初探

用OSG实现,256*256*256的分辨率,每一帧都对物体进行体素化并用简单的体渲染进行显示,可以达到20FPS以上的速度,基本满足我的需要了。但我用的体素化的方法还存在一些问题,对于一些特殊的形体还无法正确体素化。 注:只有NVIDIA 8系列显卡以上才支持硬件渲染到3D贴图。

效果: Read more

正确运行OSG的例子

OSG为我们提供了很多有用的例子,那么如何正确运行这些例子呢?我将我的一些经验写出来,希望对大家有所帮助。 Read more

osgNETDemo

写了一个简单的OpenSceneGraph和.NET结合的例子。这个例子使用了C++/CLI语言进行托管和非托管之间的相互调用,使用.NET的Windows Forms类库进行UI设计,OSG进行渲染。该例子提供了 Read more

数控弯管机加工三维仿真(视频)

这是我一直在做的数控弯管机加工三维仿真程序的视频。目前整个程序用C++/CLI写成,界面用的是.NET的控件(颜色因为要和之前工程保持一致,所以比较丑),三维部分使用OSG进行显示,控制使用托管C++进行编程以便和OSG进行交互。三维机床使用Solidworks建模然后进行处理导出为OSG支持的格式。 Read more

核磁共振三维重建(视频)

抓了一个视频下来,图片版本见:核磁共振三维重建

(2008-11-27:由于老主机不支持视频播放,该链接已经失效) Read more

核磁共振三维重建

哈哈,看看我做的核磁共振图像重建的渲染,多亏我的8800GTS了,要不然还无法做得出来。目前还处在开发阶段,可实现实时任意切割,速度还可以优化,主要是Shader的书写和一些压缩算法的考虑等等,还可能要使用一些更高级的特性来加速。 Read more

OpenSceneGraph 笔记--如何导出三角形数据2

今天写了一个导出三角形的类,可以导出一个Group的所有三角形数据(包括Group的所有child),主要用于碰撞检测.比如有一个Group"自行车",这个Group包含有子Group"前轮"和子Group"后轮",子对象通过MatrixTransform与父对象相连.那么这个类可以将Group"自行车"包括"前轮"和"后轮"的三角形数据都导出到一个vector里面,方面用于碰撞检测.
代码片段如下: Read more

OpenSceneGraph 笔记--世界如此之美好!

在用OpenSceneGraph之前我费尽心思成功的把3DS模型里面的层次关系导入到我的程序中,学到了不少的东西。昨天在研究OpenSceneGraph的3DS插件的时候发现插件并没有我想象当中那么完美,在调入文件的时候丢失了所有的层次结构,这令我很懊恼。在尝试了修改3DS插件以后,觉得要解决这个问题还需要重新写一个新的插件。当然,这会带来巨大的工作量,不合算。 Read more

12
Return top