本发明专利技术公开了一种面向GoCAD软件的植入式真三维立体显示方法:在所述GoCAD软件采用的3D API调用和显卡显示之间采用植入式的渲染数据拦截技术,对原始的单通道颜色信号和深度信号、三维场景变换矩阵和投影变换矩阵进行捕获;对这些信息进行解析,重构栅格化的三维数据;基于立体视觉原理,自适应地将该场景重新变换到两个不同的视点位置,形成可供立体显示的双目视觉立体像对,驱动显卡对双目立体像对进行立体输出;利用偏振、红绿和闪闭式眼镜等进行真三维立体显示与观测。本发明专利技术可以对现有GoCAD软件在不改变其程序和操作模式的情况下实现真三维立体化的场景展示。
【技术实现步骤摘要】
本专利技术涉及三维可视化
,具体涉及一种面向GoCAD软件的植入式 真三维立体显示方法。
技术介绍
随着计算机技术的发展,立体显示已经成为环境仿真、模拟训练以及规 划设计等领域常用的技术手段,甚至开始与电影、电脑游戏等结合产生立体 电影和真三维游戏融入人们的日常生活。地质三维软件作为一种专业的三维 应用软件,在城巿地下工程、矿山开釆、石油储量分析等方面具有重要的应 用。GoCAD软件是一种在PC环境下运行的三维地质可视化软件,可以支持丰富的地质专业数据的分析与可视化。在三维应用中实现立体视觉是一种潮流,在单一显示设备上观察到立体景 物,需要将左、右眼所看到的影像各自独立分开,然后通过特定的外置设备 使左右眼看到不同的影像而通过大脑的生理作用形成立体视觉。传统的立体 显示需要专业的设备进行立体显示,包括支持左右缓存的显卡和支持双通道 显示的立体显示设备。基于上述技术,产生了广为流行的虛拟现实技术,在 机器仿真、战场模拟等领域得到了广泛的应用。但是,由于需要专业设备, 成本高昂,也限制了立体显示技术的应用,所以立体显示的应用不能得到推 广,大量的三维程序还是釆用单通道技术进行显示,缺乏立体感,失去了三 维程序应有的立体显示特性。同时,由于立体显示需要专门硬件,特殊的编程技巧,也造成了大量的程序在开发时没有考虑立体显示特性,没有在程序 中实现支持立体显示的功能,使得这些程序即使在有立体显示功能的硬件上也不能显示立体。这些程序占据了现在三维显示程序的绝大部分,GoCAD也没有突破上述限制,其在建模过程中,用户还是只能看到单通道的透视三维,不能实现真三维的立体显示,不能达到最佳的应用效果。
技术实现思路
本专利技术所要解决的问题在于克服GoCAD (下简称GoCAD)软件在三维显示 中存在的不足,实现对原软件不加修改的真三维立体显示。本专利技术的核心是 利用三维渲染的基本原理,通过拦截显卡结果帧图像中颜色数据和深度数据, 解析生成结果帧图像的投影变换矩阵,应用三维渲染的基本原理以及重构栅 格化的三维场景,在此场景基础上,应用立体视觉原理,生成立体像对,基 于不同的立体显示模式,驱动显卡进行立体输出。本专利技术依赖的技术基础是计算机图形学中关于三维渲染的基本模型,即 GoCAD系列软件使用的3D API (当前在Windows下GoCAD系列软件均使用 OpenGL)的三维渲染的基本模型,包括三维渲染流水线、顶点的变换流水线、 Z缓冲区算法等。实现依据是OpenGL API和显卡,两者均是基于该基本模型 进行工作的。本专利技术在不更改GoCAD源代码、二进制代码或计算机硬件结构 的情况下,使该计算机软件实现双目视觉的立体真三维显示与观测。计算机三维显示的基本原理是将三维场景经过几何变换和光照处理以及 栅格化之后,生成一幅二维栅格图像在输出设备上输出。三维场景中包含一 系列的三维对象,三维对象是由一系列顶点构成的几何图元(包括点,线和 三角形)组合而成。顶点是一个包含三维空间位置及其对应的渲染参数的坐标点。首先对顶点数据进行透视坐标变换和光照处理。在坐标变换阶段,描 述物体几何形状的顶点被变换到视点为中心的坐标系下,再进行光照计算确 定每个顶点应该具有的颜色和亮度。计算机图形学的基本显示单元是像素, 这些几何对象被栅格化成像素,最后这些像素被送到帧缓存中等待显示,如 图2所示。在三维图形渲染中存在着一系列的坐标变换,最后将物体本身的坐标变 换成二维屏幕上的像素坐标。这些坐标变换都是将上一步变'换结果作为输出 的,构成一个顶点坐标变换的流水线,如图3所示。所有三维对象的坐标均被 统一到了同一个坐标系下,经过投影和裁剪形成规格化的坐标,通过栅格化 变换形成图像像素。Z缓冲区算法又称深度缓冲算法。由于二维平面坐标在透视投影下可以对 应无限多个三维坐标。所以栅格化的几何对象包含了每个像素对应的到视点 称为深度值的参数,如果栅格化几何对象像素的深度值小于原来像素,就用 这个像素的值代替原来位置的值,这就保证了总是距离视点最近的像素被保 存下来。针对以上原理,实现本专利技术目的的技术方案是,该方法包括以下步骤 步骤(1)针对GoCAD使用的3D API进行监控与渲染数据拦截; 步骤(2)利用场景变换矩阵和投影变换矩阵重构栅格化的三维数据; 步骤(3)自适应屏幕分辨率和人的眼基距设定两个不同的视点位置并生 成立体像对;步骤(4)针对不同的立体观察设备进行真三维观测。本专利技术的方法具体可用下列步骤实现,下列步骤不分先后a. 监控创建三维显示环境的函数,在该函数中加入调用3D API的系统检测函数功能,获取系统立体显示特性,根据相应的立体显示特性,更改原始 设定的显示环境中的立体显示模式,在支持立体显示的硬件上开启真三维立 体显示支持,在不支持立体显示的硬件上,设置标志以便进行红绿立体显示。b. 监控开始一帧绘制函数,在该函数中加入代码获取当前绘图帧的视口 尺寸,根据渲染的像素格式为立体像对创建临时的缓冲区。c. 监控改变当前绘制矩阵函数,在该函数中加入代码以获取三维应用软 件对当前绘制矩阵的更改,通过矩阵参数识别场景渲染的投影类型,当是透 视投影时,记录该矩阵,作为三维场景重构的关键参数;d. 监控将帧缓存输出到显示设备的函数,在监控函数加入代码以获取整 个帧中各像素的颜色和深度数据,基于步骤c获取的投影变换矩阵信息,反 算每个像素在视点坐标系下的三维坐标,重建出基于像素的栅格化的三维场 景;根据人眼睛的立体视觉模型,生成可供立体显示的立体像对。所述步骤(1)中3D API的监控与渲染数据拦截进一步包括利用API拦 截技术,获取三维绘制相关矩阵和三维渲染数据输出,提取实现三维透视变 换的投影矩阵、视口宽高,作为三维场景重构的关键参数;利用3DAPI的特 定函数,拦截三维渲染输出,提取显卡帧缓存中的颜色和深度数据,作为三 维场景重构的基础。3D API拦截是指利用计算机编程技术,对GoCAD使用的3D API函数调用进行监控,并对3D API产生的渲染数据进行拦截在其中插入自定义代码,达到对原有API进行监控或重新实现的目的。API拦截技术成熟且应用广泛,如 屏幕取词软件、反病毒软件、网络防火墙等等。本专利技术所指的3D API渲染拦 截是指拦截特定功能的若干关键3D API函数。所述步骤(1)中还进一步包括针对其实现3D API函数的拦截的具体步骤: 针对GoCAD使用的3D API (0penGL),通过代码注入或/和钩子函数技术编写特 定的拦截程序,在三维可视化程序的数据加载阶段,将3DAPI拦截程序加载 到三维可视化程序的进程中,从而拦截和监控3D API调用。本专利技术所指需要 拦截的3D API关键函数如下(21) 3D API创建三维显示环境的函数;(22) 3D API开始一帧场景渲染的函数;(23) 3D API改变当前渲染矩阵的函数;(24) 3D API结束一帧场景渲染的函数;(25) 3D API将渲染数据输出到当前屏幕上的函数。所述步骤(2)进一步包括利用3D API输出到显卡帧缓存中的颜色和深度 数据,结合拦截3D API调用而获得的投影参数,来解析生成颜色图像和深度 数据的三维空间信息。即,通过生成三维渲染输出的投影本文档来自技高网...
【技术保护点】
面向GoCAD软件的植入式真三维立体显示方法,其特征是,该方法包括以下步骤: 步骤(1)针对GoCAD使用的3D API进行监控与渲染数据拦截; 步骤(2)利用场景变换矩阵和投影变换矩阵重构栅格化的三维数据; 步骤(3)自 适应屏幕分辨率和人的眼基距设定两个不同的视点位置并生成立体像对; 步骤(4)针对不同的立体观察设备进行真三维观测。
【技术特征摘要】
【专利技术属性】
技术研发人员:周良辰,闾国年,温永宁,盛业华,吴明光,
申请(专利权)人:南京师范大学,
类型:发明
国别省市:84[中国|南京]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。