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

合集下载

游戏引擎和3D引擎的实现和设计

游戏引擎和3D引擎的实现和设计

游戏引擎和3D引擎的实现和设计游戏引擎和3D引擎的实现和设计摘要:游戏引擎和3D引擎是游戏开发的核心技术之一。

本文探讨游戏引擎和3D引擎的构成和实现原理,分析了引擎的设计思路和优化策略,并介绍了目前常用的游戏引擎和3D引擎的特点和使用场景。

关键字:游戏引擎,3D引擎,实现,设计,优化1.引言随着计算机图形学技术和3D游戏的飞速发展,游戏引擎和3D引擎成为游戏开发的关键技术之一。

游戏引擎和3D引擎是实现游戏世界的核心组成部分,可分为渲染引擎、物理引擎、音频引擎等多个子系统,相互配合完成游戏的渲染、动画、物理模拟、碰撞检测、音效等任务。

例如,《生化危机》采用的RE Engine游戏引擎可实现共存的物理模拟、渲染和逆向运动模糊等效果;而Unity 3D引擎则用于制作大型的跨平台2D/3D游戏。

本文将深入探讨游戏引擎和3D引擎的设计和实现原理,分析引擎需要解决的问题、如何优化性能等方面。

2.游戏引擎的构成游戏引擎可以分为渲染引擎、物理引擎、音频引擎等多个子系统,但在任何游戏引擎中都有以下几个组成部分:2.1.渲染引擎渲染引擎是游戏引擎中最重要的部分之一。

它是游戏中呈现图像的核心部分,主要任务是将游戏中三维模型的坐标转换为屏幕上的点。

渲染引擎的功能包括:1.几何变换:将三维模型的坐标和属性变换为视图坐标系中的坐标和属性。

2.光照计算:根据游戏中的光源、材质和表面区域等信息进行光照计算。

3.投影:将处理后的几何图形投影到屏幕上。

同时,渲染引擎还需要处理网格数据、纹理、贴图、材质等图形处理任务。

2.2.物理引擎物理引擎是游戏引擎的另一个重要部分,可用于处理游戏中的物理模拟、碰撞检测等任务。

物理引擎的功能包括:计算合适物理属性、实现物体模拟效果、处理碰撞检测等。

在物理引擎中,常用的算法包括冯·诺伊曼(von Neumann)、欧拉(Euler)等物理学原理。

常用的物理引擎包括N! Physics、Bullet Physics、Havok Physics等等。

采用OpenGL实现的三维游戏引擎设计与开发

采用OpenGL实现的三维游戏引擎设计与开发

采用OpenGL实现的三维游戏引擎设计与开发近年来,随着游戏产业的蓬勃发展,三维游戏引擎成为游戏开发领域的热门话题。

采用OpenGL实现的三维游戏引擎设计与开发,成为众多游戏开发者关注的焦点。

本文将深入探讨采用OpenGL实现的三维游戏引擎的设计与开发过程,带领读者一窥其奥秘。

一、三维游戏引擎概述三维游戏引擎是指用于开发三维游戏的软件框架,它提供了各种功能和工具,帮助开发者创建出高质量、逼真的三维游戏。

OpenGL作为一种跨平台的图形库,被广泛应用于三维游戏引擎的开发中。

采用OpenGL实现的三维游戏引擎具有良好的跨平台性和性能表现,因此备受开发者青睐。

二、OpenGL简介OpenGL(Open Graphics Library)是一种用于渲染2D、3D矢量图形的跨平台图形库。

它提供了一系列的函数接口,帮助开发者利用硬件加速来进行图形渲染。

OpenGL具有强大的图形处理能力和良好的跨平台性,适合用于开发各种类型的图形应用程序,尤其是三维游戏引擎。

三、三维游戏引擎设计1. 游戏引擎架构在设计三维游戏引擎时,首先需要考虑其架构设计。

一个典型的三维游戏引擎包括渲染引擎、物理引擎、场景管理器、资源管理器等模块。

渲染引擎负责处理图形渲染相关任务,物理引擎处理物体之间的碰撞和运动等物理效果,场景管理器负责管理游戏场景中的各种对象,资源管理器则负责加载和管理游戏所需的资源文件。

2. 图形渲染技术在采用OpenGL实现的三维游戏引擎中,图形渲染技术是至关重要的一环。

OpenGL提供了丰富的图形渲染功能,包括顶点着色器、片元着色器、纹理映射等功能。

通过合理地利用这些功能,可以实现出色彩丰富、逼真度高的画面效果。

3. 物理模拟技术除了图形渲染技术外,物理模拟技术也是三维游戏引擎不可或缺的一部分。

通过物理引擎模拟物体之间的碰撞、重力等物理效果,可以使得游戏更加真实和具有交互性。

在设计三维游戏引擎时,需要合理地集成物理模拟技术,以提升游戏体验。

三维几何图形加速引擎设计及FPGA实现的开题报告

三维几何图形加速引擎设计及FPGA实现的开题报告

三维几何图形加速引擎设计及FPGA实现的开题报告一、选题背景对于三维几何图形的实时渲染需要高性能的计算系统支持,FPGA天生就拥有高并行、高可定制化等特性,是实现三维几何图形加速引擎的理想平台之一。

本项目旨在设计一个基于FPGA的三维几何图形加速引擎,能够快速准确地进行视景变换、裁剪、投影、光栅化等计算操作。

其主要应用于游戏引擎、虚拟现实、仿真等领域。

二、研究内容1. 三维几何图形的基本概念和计算方法。

2. 正交和透视两种投影方式的原理和实现方式,选取一种投影方式进行实现。

3. 绘制图元的方法,包括点、线和三角形的光栅化算法。

4. 三维图形的变换和变形在FPGA上的实现,包括平移、旋转、缩放等。

5. 研究并实现三维几何图形的裁剪算法。

6. 构建基于FPGA的三维几何图形加速引擎,将之应用到游戏引擎、虚拟现实、仿真等领域。

三、研究计划1. 第一阶段(2周):研究三维几何图形的基本概念、投影方式原理,熟悉FPGA的开发环境及工具,并在Vivado开发板上实现简单的2D图形绘制算法。

2. 第二阶段(4周):学习三维图形的变换、变形和裁剪算法,掌握三维图形的编程技巧,并在Vivado开发板上进行实现。

3. 第三阶段(4周):探究三维几何图形的光栅化算法及实现方式,实现简单的三角形绘制,并进一步完善该算法的性能和精度。

4. 第四阶段(2周):将以上所学知识应用于构建基于FPGA的三维几何图形加速引擎,并进行调试和验证。

5. 第五阶段(2周):继续完善和优化三维几何图形加速引擎,进行性能测试和结果分析。

四、预期结果本项目将实现一个基于FPGA的三维几何图形加速引擎,并探究其在游戏引擎、虚拟现实、仿真等领域的应用。

该引擎将具有高并行、高精度、高性能等特性,能够快速准确地进行三维几何图形渲染和模拟。

基于OpenGL的3D游戏引擎设计与实现

基于OpenGL的3D游戏引擎设计与实现

基于OpenGL的3D游戏引擎设计与实现第一章:引言在过去的几年里,3D游戏在全球范围内受到了广泛的关注和喜爱。

随着技术的不断发展,游戏开发者能够创建更加逼真和令人兴奋的游戏体验。

为了实现这样的效果,使用基于OpenGL的3D游戏引擎已经成为了游戏行业的主流选择。

本文将介绍基于OpenGL的3D游戏引擎的设计与实现。

第二章:OpenGL的概述OpenGL是一种用于图形渲染的编程接口,可以用来开发各种类型的应用程序,包括游戏。

它提供了一组函数和操作符,可以用来绘制2D和3D图形,并实现各种光照和阴影效果。

第三章:3D游戏引擎的基本组成部分一个基于OpenGL的3D游戏引擎通常由以下几个主要组成部分组成:1. 图形渲染器:负责将3D模型和纹理渲染到屏幕上。

2. 场景管理器:用于管理游戏世界中的对象、光照和阴影等。

3. 物理引擎:负责模拟游戏中的物理效果,如碰撞检测和力学模拟。

4. 用户交互系统:负责处理用户输入,例如键盘和鼠标事件。

5. AI系统:用于实现游戏中的人工智能,例如敌人的行为和决策等。

第四章:基于OpenGL的3D游戏引擎的设计原则在设计基于OpenGL的3D游戏引擎时,需要考虑以下几个重要原则:1. 模块化:将游戏引擎划分为不同的功能模块,每个模块负责一个特定的任务,使得整个引擎更容易维护和扩展。

2. 高性能:使用有效的渲染技术和算法,以及合理的数据结构和算法,确保游戏引擎具有较高的性能和帧率。

3. 可移植性:尽量减少与特定硬件和操作系统的依赖,使得游戏引擎可以方便地移植到不同的平台上运行。

4. 可定制性:提供一定程度的可定制性,使得游戏开发者可以根据自己的需求和创意进行自定义开发。

5. 易用性:提供简单易用的API和工具,降低游戏开发者的学习和使用成本。

第五章:基于OpenGL的3D游戏引擎的实现基于上述原则,我们可以开始实现基于OpenGL的3D游戏引擎。

首先,我们需要选择合适的开发平台和开发工具,例如OpenGL库和相关的开发工具箱。

大学毕业设计论文_3D引擎设计(VC++)

大学毕业设计论文_3D引擎设计(VC++)

3D引擎设计摘要本文应用面向对象设计方法,开发一个实时渲染的图形引擎框架结构。

在结构中主要使用OpenGL函数接口,此结构也适用于Direct3D。

使用设计模,对框架进行抽象,分成以下子系统:数学系统,核心系统,平台支持系统。

对于数学系统主要提供在渲染过程中需要用到的数学,和线性代数。

例如:向量,矩阵等。

核心系统是整个结构的核心,消息处理,当前帧的渲染都在核心系统中,它负责调节,调用和维护其他的子系统。

平台支持,主要考虑到可能的夸平台原因而抽象出来的一层,为将来使用。

从比较低的级别上来看,图形引擎负责描绘对观察者可见的物体。

典型的就是使用图形API,例如:OpenGL、Direct3D来进行渲染,描画相应的物体。

从比较高的级别上来看,引擎主要是封装了一些固定的算法,对场景的组织和对底层的隔离,让使用此框架进行应用开的开发人员不必考虑底层的细节问题。

本系统在Windows 平台上使用VC++进行开发。

关键词3D引擎结构;场景组织;四叉树;动态细节度控制AbstractThis paper uses object-oriented method to design a 3D graphic engine architecture for real time rendering . In this framework major use OpenGL API .But the ideal apply equally as well as e design pattern to abstract the structure and divide into such subsystems: Mathematic subsystem, Core subsystem、Platform supply subsystem. For the Mathematic subsystem. the major responsibility is to provide the require of mathematic and linear algebra .Such as vector ; matrix etc. Core subsystem is the core of the whole framework ,message process ,render current frame are all in this subsystem. It take responsibility for adjustment ,scheduling and maintain other subsystems. Platform supply subsystem is in considering of boast platform for the future. At low-level, a graphics engine has the responsibility to draw the objects that are visible to an observer. Typically uses a graphics API such as OpenGL or Direct3D to implement a renderer whose job it is to correctly draw the objects .At high-level ,a graphics engine encapsulations some algorithm ,organize scene, separate the detail from low level, Let application programmers who use this engine without regard for the low level detail. Example with render API to use, develop on which platform, how to organize scene and some implicit algorithm. This system in the Windows platform using VC + + for development.Keywords 3D engine;architecture;scene organize;quaternary tree;dynamic detail control目录摘要 (I)Abstract (II)第1章绪论 (1)1.1选题背景及目的 (1)1.2 课题研究的内容 (1)第2章概要设计 (3)2.1系统整体结构描述 (3)2.2 各个子模块描述 (3)2.2.1 数学子系统 (4)2.2.2 平台支持 (5)2.2.3 引擎核心 (5)第3章类之间的继承和调用关系 (7)3.1 主要类之间的继承关系 (7)3.2 主要调用关系描述 (7)第4章详细设计 (9)4.1数学子系统 (9)4.1.1 向量 (9)4.1.2 矩阵 (10)4.1.3 四元数 (11)4.2 引擎核心 (12)4.2.1 场景的组织 (12)4.2.2 不可见剔除 (21)4.2.3主渲染循环 (22)4.2.4主更新循环 (24)4.3 平台依赖 (26)4.3.1 窗口的创建 (26)4.3.2 消息处理器 (27)4.3.3 消息映射机制的实现 (27)第5章系统测试 (30)5.1 软件测试基础理论 (30)5.1.1 软件测试定义 (30)5.1.2 软件测试基本概念 (30)5.2 软件测试目的 (31)5.3 软件测试方法分类 (31)5.3.1 静态测试与动态测试 (31)5.4 本系统的测试 (31)结论 (33)致谢 (34)参考文献 (35)附录A (36)附录B (40)第1章绪论1.1选题背景及目的在上世纪90 年代以前,电子游戏和图形程序的制作业还没有引擎这一概念,所有厂商在制作游戏和图形程序的时候都是以小组团队甚至是个人形势来独立制作图形程序,通过用各种编程语言来编写程序。

3D游戏开发引擎的设计与实现

3D游戏开发引擎的设计与实现

3D游戏开发引擎的设计与实现近年来,随着科技的不断进步和发展,3D游戏的市场需求不断增长。

为了满足游戏开发者对于高质量、高性能游戏的需求,3D游戏开发引擎逐渐成为了游戏行业的核心技术之一。

本文将探讨3D游戏开发引擎的设计与实现,分别从架构设计、渲染管线、物理模拟和工具支持等方面进行详细阐述。

首先,3D游戏开发引擎的设计需要考虑到游戏开发的各个环节,包括资源管理、场景管理、碰撞检测、物理模拟等。

因此,合理的架构设计是确保引擎稳定性和性能的关键。

引擎应该采用模块化设计,将不同的功能模块分开进行开发,不同模块之间应该有清晰的接口和通信机制。

同时,引擎应该提供强大的插件系统,方便游戏开发者根据自己的需求进行扩展和定制。

在渲染管线方面,3D游戏开发引擎应该支持现代图形硬件的特性,如着色器模型、GPU并行计算等。

引擎应该提供灵活的材质系统,支持多种渲染技术,如光照、阴影、环境遮挡等。

此外,为了提高渲染效果和性能,引擎应该支持动态批处理和渲染资源的优化管理。

物理模拟是3D游戏中不可忽视的部分,引擎应该提供强大而高效的物理引擎,用于模拟游戏中的物理现象,如重力、碰撞、布料模拟等。

物理引擎应该能够与渲染管线紧密集成,实现高效的物理模拟和渲染的交互。

除了核心功能,3D游戏开发引擎还应该提供丰富的工具支持,方便游戏开发者进行快速开发和迭代。

工具支持包括场景编辑器、动画编辑器、粒子系统、碰撞检测工具等。

这些工具应该提供直观的用户界面和强大的功能,方便开发者进行游戏逻辑建模和调试。

为了提高开发效率和降低学习成本,3D游戏开发引擎还应该提供易于使用的编程接口和文档。

引擎应该支持主流的编程语言和开发环境,如C++、Unity、Unreal Engine等。

此外,引擎应该提供详细的开发文档和示例代码,方便开发者学习和使用。

综上所述,设计一个高质量的3D游戏开发引擎需要考虑到很多因素。

引擎的架构设计、渲染管线、物理模拟和工具支持等方面都是至关重要的。

三维渲染引擎设计与实践

三维渲染引擎设计与实践

三维渲染引擎设计与实践简介三维渲染引擎是计算机图形学领域的重要组成部分,它负责将三维模型转化为最终的二维图像。

本文将介绍三维渲染引擎的设计与实践,包括其基本原理、核心算法和实现方法。

基本原理三维渲染引擎的基本原理是模拟光线在场景中的传播和交互过程,从而生成最终的图像。

其主要包括以下几个步骤:1.几何建模:通过数学表示方法将三维物体抽象为几何体,如点、线、面等。

2.视点设置:确定观察者的位置和方向,以及相机参数如视角等。

3.光照计算:根据光源的位置、颜色和强度等参数计算场景中各个物体表面的光照强度。

4.投影变换:将三维物体投影到二维屏幕上,得到透视或正交投影效果。

5.图元光栅化:将几何体分解为像素,并进行插值、裁剪等操作,得到离散化的图元。

6.纹理映射:将纹理贴图映射到物体表面,增加真实感和细节。

7.像素着色:根据光照模型和材质属性对每个像素进行着色,生成最终的图像。

核心算法三维渲染引擎的核心算法主要包括光线追踪、阴影计算、反射折射等。

光线追踪光线追踪是一种逆向的渲染技术,从观察点出发,通过递归地跟踪光线在场景中的传播路径,计算出每个像素点的颜色。

其基本步骤如下:1.发射主光线:从观察点发射一条光线经过像素点,与场景中的物体进行相交判断。

2.计算交点:根据相交判断结果,计算出与光线相交的物体表面上的交点坐标。

3.计算光照:根据交点处物体表面的材质属性和光源信息,计算出该点的颜色值。

4.发射次要光线:根据材质属性如反射率和折射率等,发射反射光线或折射光线,继续追踪。

5.递归计算:重复上述步骤,直到达到最大递归深度或没有交点为止。

阴影计算阴影计算是确定物体表面是否被遮挡而导致部分或全部区域变暗的过程。

常用的阴影计算方法包括平面投影、阴影贴图和体积阴影等。

平面投影是根据光源的位置和物体表面的几何信息,计算出每个像素点是否处于阴影中。

阴影贴图则通过预先渲染场景中的深度信息,将其映射到物体表面上,以实现更加真实的阴影效果。

openscenegraph三维渲染引擎设计与实践

openscenegraph三维渲染引擎设计与实践

openscenegraph三维渲染引擎设计与实践OpenSceneGraph是一个高性能的三维渲染引擎,其设计与实践主要涉及以下几个方面:1. 场景图管理OpenSceneGraph采用场景图管理的方式来管理三维场景中的各种元素,包括对象的位置、旋转、缩放、纹理、光照等信息。

场景图是由多个组件组成的树形结构,每个组件都可以包含多个子组件,同时也可以作为其他组件的子组件嵌套使用。

OpenSceneGraph采用统一的接口来管理场景图,方便用户对场景进行修改和控制。

2. 资源管理OpenSceneGraph提供了多种资源管理方式,包括纹理、模型、光束、着色器等。

在用户使用OpenSceneGraph创建场景时,可以通过资源管理的方式将所需的资源加载到内存中进行管理,以提高渲染效率。

OpenSceneGraph还支持多种文件格式,用户可以根据需要选择合适的文件格式。

3. 渲染器OpenSceneGraph采用基于状态的渲染器,即渲染对象的视图取决于对象自身状态的变化。

渲染器使用OpenGL作为绘图接口,通过OpenGL实现具体的渲染过程。

OpenSceneGraph提供了诸如深度测试、透明度、纹理等常用的渲染特性,并且还支持自定义的着色器编写。

4. 交互控制OpenSceneGraph支持用户交互式控制场景,通过鼠标和键盘等输入设备,用户可以对场景进行平移、旋转、缩放等操作,并且还可以通过编程为特定对象添加自定义的交互控制方式。

5. 多平台支持OpenSceneGraph支持跨平台运行,可以在多个操作系统(如Windows、Linux、Mac OS等)上运行。

对于开发人员而言,跨平台特性可以大大降低开发成本并提高程序可移植性。

在实践中,OpenSceneGraph被广泛应用于VR、游戏、模拟器等多个领域,可以用于构建各种虚拟世界和模拟环境。

同时,OpenSceneGraph的开源特性为用户提供了方便,用户可以根据自己的需要对源代码进行修改和扩展。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第39卷 第1期 电 子 科 技 大 学 学 报 V ol.39 No.12010年1月 Journalof University of Electronic Science and Technology of China Jan. 2010 面向对象三维图形引擎的设计与实现邱 航,陈雷霆(电子科技大学计算机科学与工程学院 成都 610054)【摘要】提出并实现了一种面向对象的三维图形渲染引擎Gingko ,对引擎的体系结构、各模块之间的关系以及关键技术进行了分析说明。

该引擎提供可扩展的软件体系结构、高效的场景处理方法、方便易用的应用程序接口,为三维图形应用的快速开发和高效运行提供了支撑。

实验证明,该引擎具有运行稳定、渲染速度快的特点,对于大规模室外场景的渲染速度能保持在20 fps 以上。

关 键 词 图形引擎; 插件; 实时渲染; 真实感渲染中图分类号 TP391.41 文献标识码 A doi: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 and Technology of China Chengdu 610054)Abstract An object-oriented 3D graphics engine is presented and implemented. The general architecture, the relationships of every module, and the key techniques of the engine are discussed. This engine can support extendable software architectures, and provide high 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-scale out-door scene, the speed is still above 20 fps.Key words graphics engine; plug-in; real time rendering; realistic rendering收稿日期:2008 − 06 − 25; 修回日期:2009 − 04 − 28基金项目:国家863高技术研究发展计划项目(2006AA01Z335);总装“十一五”预研项目作者简介:邱 航(1978 − ),男,在职博士生,讲师,主要从事计算机图形学、数字媒体技术方面的研究.实时真实感图形生成是计算机科学技术的重要研究方向,目标是使计算机可以产生与真实世界相同或高度近似的视觉环境,从而使用户获得身临其境的视觉感受[1-2],其应用范围覆盖大众娱乐、视景仿真、城市规划及文化教育等诸多领域。

近年来,随着计算机图形软、硬件的不断发展,人们对实时真实感渲染以及场景复杂度提出了更高的要求。

传统的直接使用底层图形接口如OpenGL 、DirectX 开发图形应用的模式越来越暴露出开发复杂性大、周期长、维护困难的缺陷。

鉴于以上原因,三维图形引擎相关技术受到了广泛的关注。

目前,国外已有众多商用或开源三维图形引擎,如OGRE [3]、OSG [4]等。

OGRE(object-oriented graphics rendering engine)是一种用C++实现的跨平台开源三维图形引擎。

该引擎底层对DirectX 、OpenGL 进行完全封装,采用了基于插件的体系结构,方便用户使用和功能扩展。

但OGRE 过于庞大和复杂,使用户感觉掌握困难。

此外,由于底层对DirectX 和OpenGL 的完全封装,用户无法对基本图形API 进行直接操作。

OSG(open scene graph)是一款著名的3D 图形引擎,主要用于虚拟现实、仿真和游戏等领域。

OSG 底层只提供了对OpenGL 的封装,与其他图形引擎一样,拥有诸如场景管理、地形管理和底层API 封装等功能。

但OSG 的渲染管理比较特殊,它不是采用渲染队列进行渲染管理,而是采用渲染树,更为高效。

Irrlicht 引擎是一款开源、跨平台的3D 引擎,底层封装了DirectX 和OpenGL ,并提供基于GLSL 和HLSL 的可编程渲染管道。

该引擎结构简单、速度快。

但Irrlicht 以牺牲渲染质量达到高速的目的,在光照等真实感方面比较薄弱。

纵观目前国内外三维图形引擎的发展格局,开发具有自主知识产权、融入新方法、新技术的三维图形引擎是我国在信息技术领域的一项重要目标。

本文提出并实现了一种面向对象的三维图形引擎Gingko ,该引擎不仅能提高用户的开发速度,而电子科技大学学报第39卷124且能使用户方便地将自己新的算法融入到应用中。

1三维图形引擎Gingko三维图形引擎Gingko是一个面向视景仿真、数字展示、游戏等应用的软件支撑环境。

其体系结构如图1所示。

图1 三维图形引擎Gingko体系结构在结构上,Gingko分为渲染语言封装层、核心层、扩展层以及用户接口层等4层。

渲染语言封装层:Gingko建立在底层绘制接口之上,渲染语言封装层封装了底层图形接口OpenGL、DirectX9的所有绘制属性。

与OGRE、OSG 和Irrlicht等引擎不同,Gingko对底层绘制接口的封装是一种半封闭式封装,即用户既可以通过调用Gingko提供的API实现绘制,也可以直接调用底层绘制接口。

核心层:包含引擎的主渲染框架、场景管理、渲染管理、插件管理、资源管理、消息系统等。

扩展层:包含时钟管理、用户GUI、脚本系统以及其他组件。

用户接口层:为上层用户提供统一的API。

1.1 核心层主要组件分析1.1.1 主框架主框架是整个图形引擎的骨架,它决定着渲染流程的走向以及其他功能模块之间的耦合形式。

此外,它还负责底层细节的屏蔽、渲染流程的结构化和标准化等重要功能。

在Gingko中,主框架的结构在逻辑上分为上、中、下3层。

(1) 上层为友好的用户接口,主要负责对外提供API函数集,满足用户的各种功能需求,实现用户和图形引擎的交互。

各种功能需求包括引擎的启动、资源的加载、场景的搭建、场景的渲染、场景的更改、资源的释放以及引擎的停止。

(2) 中层为引擎各模块连接核心,负责处理主框架和其他模块的相互联系和协作。

(3) 下层为底层封装,图形引擎的底层系统主要指基础图形API函数集和操作系统两大部分。

对图形引擎而言,操作系统相关的函数调用比较固定,其封装的方法也比较成熟。

对基础图形API的封装,OGRE、OSG等采用彻底封装的方式,即仅仅使用插件系统完成封装模块的更新和扩展,对用户完全透明,用户不会接触到关于OpenGL或DirectX等基础图形API的任何细节。

随着计算机图形学的发展和图形应用软件的复杂化,只能依靠插件系统进行扩展和更新的封装方式的缺点日益显著。

开发人员在使用引擎进行开发的过程中往往会产生许多重要但细微的功能扩展需求,为了这些细微的扩展需求编写插件更新主框架,必将对开发周期和开发成本带来冲击。

此外,随着计算机软、硬件的发展,人们对图形应用软件中的渲染效果、光影、特效等的需求越来越高,然而大多数特效的实现需要以特定的序列调用特定的基础图形API函数,引擎完全透明性的下层系统已经在很多方面妨碍了高级的图形特效的开发。

针对完全封装方式的缺点,Gingko采用半封闭式封装方式,在屏蔽底层系统繁琐细节的同时,也允许高级用户直接接触OpenGL、DirectX等强大的图形API函数。

1.1.2 场景管理Gingko的场景管理主要包含场景节点组织、场景分割和地形管理,通过场景树的形式组织场景内的各个元素。

场景树的各个节点之间的父子关系对应场景内元素的逻辑关系,如一片建筑区域和建筑区域内的各个建筑在场景中表现为父节点和子节点的关系。

Gingko在设计上基于插件的开放式方式,场景分割和地形管理模块都可以通过插件系统配置不同的分割和管理策略。

Gingko默认提供了基于八叉树和BSP树[5]的场景分割,以及基于ROAM[6]算法的地形调度。

1.1.3 渲染管理渲染管理主要控制场景渲染,包括Pass和Effect 两个重要概念,如图2所示。

(1) Pass是一个渲染遍即一次渲染的自然表示。

Pass主要由数据源、渲染状态、纹理对象、Shader(可编程Pass专有)和输出对象构成。

Pass按照使用固定管线和可编程管线的不同第1期邱航等: 面向对象三维图形引擎的设计与实现125可分为固定Pass和可编程Pass。

Pass的最终渲染结果可以输出到屏幕,也可以输出到一张过程纹理,以配合其他Pass完成复杂的特效渲染。

(2) Effect表示一个具体的渲染阶段,Gingko的渲染管理系统保存了一个Effect的队列,Effect同样保存了一个不能为空Pass的队列。

一般来说,一个室外场景可简单地分为天空盒Effect、地形Effect和场景元素Effect。

图2 渲染管理结构1.1.4 资源管理Gingko提供非常丰富的资源支持,包括各种格式的图片文件、模型文件以及与Gingko相关的各种配置文件。

在引擎的资源管理系统中也实现了对在场景渲染中所需的纹理、材质等信息的抽取和分类工作。

1.1.5 插件管理插件管理提供一种灵活的系统扩展模式,用户编写的算法、特效等可以注册为插件,通过插件管理机制方便、快速地扩展到引擎中。

1.1.6 消息处理系统Gingko中定义了鼠标-键盘消息和引擎自定义消息两种类型的消息。

自定义消息主要用于描述场景元素之间的相互作用,如风、爆炸对建筑物的影响等。

整个消息的处理流程分为3个阶段:第一阶段主要处理与具体场景元素相关的消息,如鼠标拾取等;第二阶段主要处理引擎默认的消息,如ESC等系统键的消息;第三阶段主要处理同具体场景元素无关的消息,如摄像机的移动等。

相关文档
最新文档