面向对象三维图形引擎的设计与实现.doc

上传人:文库蛋蛋多 文档编号:2394755 上传时间:2023-02-17 格式:DOC 页数:5 大小:551KB
返回 下载 相关 举报
面向对象三维图形引擎的设计与实现.doc_第1页
第1页 / 共5页
面向对象三维图形引擎的设计与实现.doc_第2页
第2页 / 共5页
面向对象三维图形引擎的设计与实现.doc_第3页
第3页 / 共5页
面向对象三维图形引擎的设计与实现.doc_第4页
第4页 / 共5页
面向对象三维图形引擎的设计与实现.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《面向对象三维图形引擎的设计与实现.doc》由会员分享,可在线阅读,更多相关《面向对象三维图形引擎的设计与实现.doc(5页珍藏版)》请在三一办公上搜索。

1、第 39 卷 第 1 期2010年1月电 子 科 技 大 学 学 报Journal of University of Electronic Science and Technology of ChinaVol.39 No.1Jan. 2010面向对象三维图形引擎的设计与实现邱航,陈雷霆(电子科技大学计算机科学与工程学院 成都 610054)【摘要】提出并实现了一种面向对象的三维图形渲染引擎Gingko,对引擎的体系结构、各模块之间的关系以及关键技术进行了分析说明。该引擎提供可扩展的软件体系结构、高效的场景处理方法、方便易用的应用程序接口,为三维图形应用的 快速开发和高效运行提供了支撑。实验证明

2、,该引擎具有运行稳定、渲染速度快的特点,对于大规模室外场景的渲染速度能 保持在20 fps以上。关 键 词中图分类号图形引擎; 插件; 实时渲染; 真实感渲染文献标识码 ATP391.41doi:10.3969/j.issn.1001-0548.2010.01.028Design and Implementation of Object-Oriented 3D Graphics EngineQIU Hang and CHEN Lei-ting(School of Computer Science and Engineering, University of Electronic Science

3、 and Technology of China Chengdu 610054)AbstractAn object-oriented 3D graphics engine is presented and implemented. The general architecture, therelationships of every module, and the key techniques of the engine are discussed. This engine can support extendable software architectures, and provide h

4、igh efficient scene rendering method and convenient application programming interfaces. It can greatly accelerate the development of 3D graphics and provide supports for its efficient running. Experimental results show that this engine has high stability and high rendering speed, for rendering large

5、-scale out-door scene, the speed is still above 20 fps.Key wordsgraphics engine;plug-in;real time rendering;realistic rendering实时真实感图形生成是计算机科学技术的重要研究方向,目标是使计算机可以产生与真实世界相 同或高度近似的视觉环境,从而使用户获得身临其 境的视觉感受1-2,其应用范围覆盖大众娱乐、视景 仿真、城市规划及文化教育等诸多领域。近年来,随着计算机图形软、硬件的不断发展, 人们对实时真实感渲染以及场景复杂度提出了更高 的要求。传统的直接使用底层图形接口如O

6、penGL、 DirectX开发图形应用的模式越来越暴露出开发复 杂性大、周期长、维护困难的缺陷。鉴于以上原因, 三维图形引擎相关技术受到了广泛的关注。目前, 国外已有 众多商用 或开源三 维图形引 擎,如 OGRE3、OSG4等。OGRE(object-oriented graphics rendering engine) 是一种用C+实现的跨平台开源三维图形引擎。该 引擎底层对DirectX、OpenGL进行完全封装,采用 了基于插件的体系结构,方便用户使用和功能扩展。 但OGRE过于庞大和复杂,使用户感觉掌握困难。此外,由于底层对DirectX和OpenGL的完全封装,用户无法对基本图形

7、API进行直接操作。OSG(open scene graph)是一款著名的3D图形引 擎,主要用于虚拟现实、仿真和游戏等领域。OSG 底层只提供了对OpenGL的封装,与其他图形引擎一 样,拥有诸如场景管理、地形管理和底层API封装等 功能。但OSG的渲染管理比较特殊,它不是采用渲染队列进行渲染管理,而是采用渲染树,更为高效。Irrlicht引擎是一款开源、跨平台的3D引擎,底层封装了DirectX 和OpenGL ,并提供基于GLSL 和HLSL的可编程渲染管道。该引擎结构简单、速度快。但Irrlicht以牺牲渲染质量达到高速的目的,在光照等真实感方面比较薄弱。 纵观目前国内外三维图形引擎的

8、发展格局,开发具有自主知识产权、融入新方法、新技术的三维 图形引擎是我国在信息技术领域的一项重要目标。 本文提出并实现了一种面向对象的三维图形引 擎Gingko,该引擎不仅能提高用户的开发速度,而收稿日期:2008 06 25; 修回日期:2009 04 28基金项目:国家863高技术研究发展计划项目(2006AA01Z335);总装“十一五”预研项目作者简介:邱 航(1978 ),男,在职博士生,讲师,主要从事计算机图形学、数字媒体技术方面的研究.且能使用户方便地将自己新的算法融入到应用中。图形引擎的交互。各种功能需求包括引擎的启动、资源的加载、场景的搭建、场景的渲染、场景的更 改、资源的释

9、放以及引擎的停止。(2) 中层为引擎各模块连接核心,负责处理主框 架和其他模块的相互联系和协作。(3) 下层为底层封装,图形引擎的底层系统主要 指基础图形API函数集和操作系统两大部分。对图形 引擎而言,操作系统相关的函数调用比较固定,其 封装的方法也比较成熟。对基础图形API的封装, OGRE、OSG等采用彻底封装的方式,即仅仅使用 插件系统完成封装模块的更新和扩展,对用户完全 透明,用户不会接触到关于OpenGL或DirectX等基 础图形API的任何细节。随着计算机图形学的发展和 图形应用软件的复杂化,只能依靠插件系统进行扩 展和更新的封装方式的缺点日益显著。开发人员在 使用引擎进行开发

10、的过程中往往会产生许多重要但 细微的功能扩展需求,为了这些细微的扩展需求编 写插件更新主框架,必将对开发周期和开发成本带 来冲击。此外,随着计算机软、硬件的发展,人们 对图形应用软件中的渲染效果、光影、特效等的需 求越来越高,然而大多数特效的实现需要以特定的 序列调用特定的基础图形API函数,引擎完全透明性 的下层系统已经在很多方面妨碍了高级的图形特效 的开发。针对完全封装方式的缺点,Gingko采用半三维图形引擎Gingko三维图形引擎Gingko是一个面向视景仿真、数 字展示、游戏等应用的软件支撑环境。其体系结构 如图1所示。1图1三维图形引擎Gingko体系结构在结构上,Gingko分为

11、渲染语言封装层、核心层、扩展层以及用户接口层等4层。 渲染语言封装层:Gingko建立在底层绘制接口之上,渲 染语言封 装层封装 了底层图 形接口 OpenGL、DirectX9的所有绘制属性。与OGRE、OSG 和Irrlicht等引擎不同,Gingko对底层绘制接口的封 装是一种半封闭式封装,即用户既可以通过调用 Gingko提供的API实现绘制,也可以直接调用底层绘 制接口。核心层:包含引擎的主渲染框架、场景管理、 渲染管理、插件管理、资源管理、消息系统等。扩展层:包含时钟管理、用户GUI、脚本系统 以及其他组件。用户接口层:为上层用户提供统一的API。1.1 核心层主要组件分析1.1.

12、1 主框架主框架是整个图形引擎的骨架,它决定着渲染 流程的走向以及其他功能模块之间的耦合形式。此 外,它还负责底层细节的屏蔽、渲染流程的结构化和标准化等重要功能。 在Gingko中,主框架的结构在逻辑上分为上、中、下3层。(1) 上层为友好的用户接口,主要负责对外提供API函数集,满足用户的各种功能需求,实现用户和封闭式封装方式,在屏蔽底层系统繁琐细节的同时,也允许高级用户直接接触OpenGL、DirectX等强大的图形API函数。1.1.2场景管理Gingko的场景管理主要包含场景节点组织、场 景分割和地形管理,通过场景树的形式组织场景内 的各个元素。场景树的各个节点之间的父子关系对 应场景

13、内元素的逻辑关系,如一片建筑区域和建筑 区域内的各个建筑在场景中表现为父节点和子节点 的关系。Gingko在设计上基于插件的开放式方式, 场景分割和地形管理模块都可以通过插件系统配置 不同的分割和管理策略。Gingko默认提供了基于八 叉树和BSP树5的场景分割,以及基于ROAM6算法 的地形调度。1.1.3渲染管理渲染管理主要控制场景渲染,包括Pass和Effect 两个重要概念,如图2所示。(1) Pass是一个渲染遍即 一次渲染的自然表示。Pass主要由数据源、渲染状 态、纹理对象、Shader(可编程Pass专有)和输出对象 构成。Pass按照使用固定管线和可编程管线的不同渲染语言封装

14、层DX9OpenGL材质模型纹理核心层消息系统内存组织资源管理渲染管理场景管理插件管理主框架算法特效扩展层其他脚本图形用户接口计时器用户接口第1期邱 航 等: 面向对象三维图形引擎的设计与实现125可分为固定Pass和可编程Pass。Pass的最终渲染结果可以输出到屏幕,也可以输出到一张过程纹理,以 配合其他Pass完成复杂的特效渲染。(2) Effect表示一 个具体的渲染阶段,Gingko的渲染管理系统保存了 一个Effect的队列,Effect同样保存了一个不能为空 Pass的队列。一般来说,一个室外场景可简单地分 为天空盒Effect、地形Effect和场景元素Effect。1.2.2

15、时钟模块在各种图形软件中,小到帧速计算,大到定时 器、时间轴的实现都离不开对时钟的运用和管理。 Gingko提供时钟管理模块,主要具备记时、加速、 减速、暂停、同步等功能。1.2.3脚本系统Gingko集成了对Lua脚本语言的支持,用于引擎 的动态配置,所有关于引擎的配置信息都在脚本中 设置,不涉及到源代码的重新编译。除此以外它还 管理一些变化快且对运行期性能要求不高的模块。1.2.4其他组件其他组件主要包括粒子系统、特效管理系统等,它们是图形引擎提供的一些高级功能,通过这些组件能够在图形引擎的基础上快速开发一些功能强大 的应用。图2 渲染管理结构1.1.4 资源管理Gingko提供非常丰富的

16、资源支持,包括各种格 式的图片文件、模型文件以及与Gingko相关的各种 配置文件。在引擎的资源管理系统中也实现了对在场景渲染中所需的纹理、材质等信息的抽取和分类工作。1.1.5 插件管理插件管理提供一种灵活的系统扩展模式,用户 编写的算法、特效等可以注册为插件,通过插件管理机制方便、快速地扩展到引擎中。1.1.6 消息处理系统Gingko中定义了鼠标-键盘消息和引擎自定义 消息两种类型的消息。自定义消息主要用于描述场景元素之间的相互作用,如风、爆炸对建筑物的影 响等。整个消息的处理流程分为3个阶段:第一阶段主要处理与具体场景元素相关的消息,如鼠标拾取等;第二阶段主要处理引擎默认的消息,如ES

17、C等 系统键的消息;第三阶段主要处理同具体场景元素 无关的消息,如摄像机的移动等。如果Gingko中的 消息经过3大阶段都没有进行处理,则根据是否为操 作系统的消息交由操作系统处理或丢弃。1.2 扩展层主要组件分析1.2.1 用户GUI模块用户GUI模块是Gingko为上层用户提供的开发 诸如按钮、对话框、菜单等交互界面的模块。Gingko 为开发者提供了默认的2DGUI,开发者只需要配置宽度、高度等参数,编写事件代码便能轻松实现GUI界面。除此以外,用户也可根据以上需要实现自定 义GUI,从而满足不同应用的需求。2核心算法的封装为了加快用户应用程序的开发,Gingko除了提供图形渲染引擎基本

18、功能外组件,还将图形应用中的一些关键算法通过插件实现,并封装在引擎中, 主要包括场景分割、地形LOD以及各种特效技术。 用户可以通过插件系统的配置文件自由选择是否加 载这些插件,从而决定是否在场景中启用各种高级 渲染技术。2.1 地形算法封装地形是室外场景的重要组成部分,特别对于大 规模室外场景而言,提供对地形渲染的优化和管理是提高场景整体渲染效率的有效手段。在Gingko中,根据用户可能实现的地形大小,实现了四叉树和ROAM两种不同的地形LOD简化算法。四叉树LOD 地形简化算法可以很好地满足中等场景中简单地形 的简化和渲染。但是该算法效率比较低,而且在复 杂地形的简化中存在裂缝问题,无法满

19、足大规模室 外场景中复杂地形的渲染需求。ROAM算法是一种 当前比较流行的基于最优自适应网格的实时LOD算 法,它独特的三角形网格表示方法可以很好地避免 地形裂缝,非常适用于复杂地形的简化。用户可以 根据自己的实际情况通过插件管理系统自由地决定 场景中所使用的LOD简化算法类型,也可以通过加 载自己编写的插件在场景中验证自己的LOD简化算 法。2.2 场景分割算法封装场景分割是场景管理中的一项重要功能,采用 合理的场景分割算法将场景划分为更小的子场景,渲染管理Effect3可编程 Pass固定 PassEffect2可编程 Pass固定 PassEffect1可编程 Pass固定 Pass可以

20、非常有效地降低场景中的光线跟踪、碰撞检测等运算量较大操作对场景渲染效率造成的冲击。在 Gingko中,封装了BSP和八叉树两种场景分割算法。 BSP主要应用于室内场景的光线跟踪和碰撞检测操 作运算的简化。八叉树则是一种大规模室外场景高 效场景分割算法。在使用Gingko进行图形应用软件 开发时,用户可以根据不同场景情况,灵活地渲染 不同的场景分割算法扩展场景管理的功能。2.3其他特效算法封装场景中的各种特效是增加真实感的有效手段, 在Gingko中,将粒子系统作为默认的特效扩展模块, 以插件的形式实现并整合到引擎的主体中。利用粒 子系统已实现了爆炸、烟雾、火焰等图形应用软件 中多种常见的特效实

21、现。用户在图形软件开发过程 中,只需要通过加载插件,或者调用插件对象中相 关的API函数,就能为场景添加各种基于粒子系统的 特效。(5) 帧处理阶段选择渲染管线的类型,开始处理每一帧的场景,包括帧前处理、帧绘制、2DGUI绘 制以及帧后处理。帧前处理完成渲染基本属性的设 置、场景树到渲染队列的转换;帧绘制负责对渲染 队列中的场景进行绘制;2DGUI绘制在2D的显示模 式下完成对屏幕按钮、列表框等基本交互元素的绘 制。(6) 材质资源卸载阶段释放材质纹理资源。(7) 设备资源释放阶段恢复像素格式,释放设备 上下文。实验结果与分析三维图形引擎Gingko 在操作系统为WindowsXP Profe

22、ssional (SP2)、CPU为Intel Core(TM)2 Duo2.2 G、内存1 GB、显卡为NVIDIA GeForce 8600 GT 配置的PC机上得到实现。由Gingko渲染的室外场景 如图3所示。43渲染流程标准化及封装考虑到上层图形应用可能存在大量的数据运算和场景元素的渲染,在某些情况下可能还需要渲染一些更加真实和复杂的特效。对于这些渲染需求, 图形的固定渲染管道显然不能很好胜任。因此, Gingko不仅提供了图形的固定渲染管线用于方便快 速的应用开发,同时提供了图形的可编程渲染管线 支持高级的应用开发。在着色器语言的选择上,为 了方便屏蔽图形开发包的底层细节,Ging

23、ko选择了 通用的着色器语言Cg作为可编程渲染管线的规范着 色器语言。Gingko中渲染流程的标准化与封装将图形渲染 的过程分为7个按顺序进行的标准步骤,所有的渲染 过程由分割后的几个步骤完成。主要阶段包括:(1) 全局资源初始化阶段主要对与显示器、GPU相对独立的资源(如文件资源、模型等)进行处理。该 阶段还包含对引擎配置文件的处理。(2) 设备初始化阶段首先获取显示器、显卡的重要信息,根据引擎配置的显示分辨率、刷新率调整 全屏显示状态下的显示模式;然后创建主显示窗口;设置默认渲染管线。(3) 纹理材质加载阶段完成各材质的加载过程。(4) 消息处理阶段初始化结束,渲染处理开始。 该阶段主要负

24、责将Windows的系统消息加入到自己的消息系统,由引擎消息系统接管Windows的消息 处理。a. Gingko渲染的体育场场景b. Gingko渲染的爆炸场景c. Gingko渲染的群体动画场景图3 Gingko渲染的室外场景除了渲染效果外,决定一个渲染引擎好坏的重 要指标是它的渲染速度,特别是在渲染一个复杂场 景时。实验通过采用基于LOD与IBR的大面积森林 场景渲染算法对比Gingko与OGRE和Irrlicht的渲染 效率,其结果如图4所示。第1期邱航 等:面向对象三维图形引擎的设计与实现127120100806040200式底层封装方法更有利于开发者定制个性化功能,为高效的图形应用

25、开发提供保障。参考文献1 埃肯因. 实时计算机图形学M. 普建涛, 译. 北京: 北京 大学出版社, 2004: 1-20.AKENINE-MOLLER T. Real time renderingM. Translated by PU Jian-tao. Beijing:Peking University Press, 2004:1-20.2 赵沁平, 郝爱民, 王莉莉, 等. 实时三维图形平台BH_ GRAPHJ. 计算机研究与发展, 2006, 43(9): 1491-1497.ZHAO Qin-ping, HAO Ai-min, WANG Li-li, et al. BH_ GRAPH

26、: a real time 3D graphics platformJ. Journal of Computer Research and Development, 2006, 43(9): 1491-1497.3 PARILOV E, ZORIN D. Real-time rendering of textures with feature curvesJ. ACM Transactions on Graphics, 2008,27(1): 1-15.4 申闫春, 朱幼虹, 曹 莉, 等. 基于OSG的三维仿真平台 的设计与实现J. 计算机仿真, 2007, 24(6): 207-211.S

27、HEN Yan-chun, ZHU You-hong, CAO Li, et al. Design and implementatin of 3D simulation platform based on OSGJ. Computer Simulation, 2007, 24(6): 207-211.5 TAN Ping, ZENG Gang, WANG Jing-dong, et al.Image-based tree modelingJ. ACM Transactions onGraphics. 2007, 26(3): 87-93.6 FUCHS H. On visible surfac

28、e generation by a priori tree structuresJ. Computer Graphics, 1980, 14(3): 124-133.7 魏 楠, 江 南. ROAM算法及其在地形可视化中的应用J. 计算机工程与科学, 2007, 29(2): 66-68.WEI Nan, JIANG Nan. The ROAM algorithm and its application in terrain visualizationJ. Computer Engineering and Science, 2007, 29(2): 66-68.8 DUNCAN A K, HA

29、RDY A. Level of detail for terrain geometry imagesC/Proceedings of the 5th international conference on Computer Graphics, Virtual Reality, Visualization and Interaction in Africa. Grahamsown: ACM Press, 2007: 25-30.9 廖昌阊, 李 辉, 潘宏伟, 等. 宏三角形的大规模地形漫游算法J. 电子科技大学学报, 2008, 37(1): 120-123. LIAO Chang-chang

30、, LI Hui, PAN Hong-wei, et al. A1 0003 000 5 000 7 000森林树木/棵9 000 10 000图4 渲染帧速对比图实验结果表明,图形引擎Gingko在渲染大规模 复杂场景时,渲染速度高于OGRE和Irrlicht,完全满 足实时交互的目的,在森林规模达到10 000棵树的 情况下,渲染帧数仍能保持在20 fps以上。在算法优 化的情况下,帧数将得到进一步提高。为了提高用户的开发效率,在Gingko中预先部 署了一些当前图形学领域成熟的算法和技术实现, 如植被绘制算法5、BSP6算法、ROAM7等地形LOD 算法8-10、以及公告板及天空盒等。用

31、户只需简单调 用Gingko所提供的API便能轻松实现相应功能。图5a 显示了利用Gingko提供的API实现的基于ROAM算 法的室外场景,图5b是该场景对应的地形网格。a. 基于ROAM地形算法的室外场景效果marco-triangle-basedalgorithmforlargeterrainrenderingJ. Journal of University of Electronic Scienceand Technology of China, 2008, 37(1): 120-123.10 DECOROP,TATARCHUKN.Real-timemesh simplification using the GPUC/Proceedings of the 2007Symposium on Interative 3D Graphics and Games. Seattle: ACM Press, 2007: 161-166.b. 基于ROAM地形算法的地形网格图图5 基于ROAM算法的室外场景结 束 语本文所提出的三维图形引擎为视景仿真、数字5展示、游戏等应用的开发者提供了易用、可扩展的软件支撑。相关实验表明,该引擎不仅在绘制速度 方面优于国外常见开源图形引擎,所提供的半封闭编辑蒋晓帧速/帧s1GingkoOGREIrrlicht

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号