绘制参数类DrawArgs主要对绘制时需要的对象如:设备对象Microsoft.DirectX.Direct3D.Device、Microsoft.DirectX.Direct3D.Font字体对象、相机对象CameraBase、星球对象World、下载队列对象DownloadQueue、程序插件集合类对象WorldWind.Widgets.RootWidget、GDI+的图形对象System.Drawing.Graphics、鼠标位置对象System.Drawing.Point、待绘制的位图对象System.Drawing.Bitmap等进行了封装。其类图结构如下所示:

在Windows系统下运行的Direct3D程序的基本结构非常简单清晰,如下图所示。它主要包含五个步骤:(1)创建一个图形渲染窗口;(2)初始化Direct3D,包括创建Direct3D对象、Direct3D设备对象以及要渲染的图形对象;(3)消息循环;(4)渲染图形;(5)清除在初始化时创建的所有Direct3D对象和图形对象。其中,消息循环和图形渲染不断进行。如果消息队列中有消息传入,则程序先处理消息,然后再渲染图形,如果没有则一直渲染图形(参见《DirectX游戏编程基础教程》一书)。

Direct3D程序的基本结构

DrawArgs类完成了初始化Direct3D的工作,包括创建Direct3D对象、Direct3D设备对象以及要渲染的图形对象。

该类主要定义以下这些函数完成上面提到的相应功能的:

构造函数public DrawArgs( Device device, System.Windows.Forms.Control parentForm )、初始化引用private void InitializeReference()、设备重置函数private void OnDeviceReset(object sender, EventArgs e)、开始绘制函数public void BeginRender()、结束绘制函数public void EndRender()、将后台缓冲区数据及时呈现到前台缓冲区去绘制函数public void Present()、创建字体函数public Font CreateFont( string familyName, float emSize )、更新鼠标状态函数public void UpdateMouseCursor(System.Windows.Forms.Control parent)、以及使用多数硬件系统都提供的获取高精度计时器的函数P erformanceTimer.QueryPerformanceCounter( ref curTicks )(参见《精通C#游戏编程》一书)。

WorldWind源码剖析系列:绘制参数类DrawArgs的更多相关文章

  1. WorldWind源码剖析系列:设置类SettingsBase

    PluginSDK中的星球设置类WorldSettings 和WorldWind.程序设置类WorldWindSettings均继承自父类SettingsBase.类图如下所示.其中父类Setting ...

  2. WorldWind源码剖析系列:挂件类Widgets

    WorldWindow用户定制控件类中所包含的的挂件类Widgets控件主要有如下图所示的派生类.它们的类图如下所示. 鉴于挂件类Widgets及其派生类,相对简单,基本上都是些利用DirectX3D ...

  3. WorldWind源码剖析系列:插件类Plugin、插件信息类PluginInfo和插件编译器类PluginCompiler

    插件类Plugin是所有由插件编译器加载的插件子类的抽象父类,提供对插件的轻量级的访问控制功能. 插件信息类PluginInfo用来存储关于某个插件的信息的类,可以理解为对插件类Plugin类的进一步 ...

  4. WorldWind源码剖析系列:日志类Log

    Utility工程中的日志类Log主要用来输出Debug状态下的调试信息.该类的类图如下: 日志类Log中使用到的类和内嵌结构体类型主要有以下这些: public class LogEventArgs ...

  5. WorldWind源码剖析系列:相机类CameraBase

    相机基类CameraBase PluginSDK中的相机类CameraBase是三维计算机图形学中的概念.观察者在三维场景中漫游时,通过眼睛看到的场景和相机拍摄过程非常一致.实际上,Direct3D和 ...

  6. WorldWind源码剖析系列:缓冲类Cache

    缓冲类Cache主要用于在最小的限制条件下保存从远程服务器通过网络下载下来的地理空间数据,以便当用户处于离线状态时能够使用这些已经缓冲好的数据.Google Earth也采用类似机制处理用户离线浏览漫 ...

  7. WorldWind源码剖析系列:角度类Angle

    PluginSDK中的角度结构体Angle类图如下所示. 角度结构体主要定义了一个弧度表示角度值的字段:double Radians.还有几个表示角度最大值.最小值.非数值和零角度等字段.定义了一个D ...

  8. WorldWind源码剖析系列:BMNG类构造函数深入分析

    BMNG构造函数深入分析 一.主要类图 二.主要功能: 1)        BMNG类 BMNG类将包含以“Blue Marble”为主题的所有可渲染影像的根节点添加到当前星球的可渲染对象列表中,包括 ...

  9. WorldWind源码剖析系列:四元数类Quaternion

    PluginSDK中的Quaternion4d类可能是感觉Microsoft.DirectX. Quaternion类不太实用或不够用,自己有重新写的. 四元数是英国数学家哈密顿(W.R.Hamilt ...

  10. WorldWind源码剖析系列:星球类World

    星球类World代表通用的星球类,因为可能需要绘制除地球之外的其它星球,如月球.火星等.该类的类图如下. 需要说明的是,在WorldWind中星球球体的渲染和经纬网格的渲染时分别绘制的.经纬网格的渲染 ...

随机推荐

  1. drupal7获取当前theme的路径

    //方式一 $theme_path=drupal_get_path('theme', $theme); //方式二 $theme_path=path_to_theme();

  2. ionic3 下创建ionic1项目

    一 start命令 ionic start sdscapp --type=ionic1 ——添加平台命令 ionic cordova platform add android

  3. PeopleSoft面试题(服务器相关)

    如何配置app服务器与web服务器的负载均衡?请详细说明. App Server: 在配置App Server负载均衡时候,通过webserv目录下的configuration.properties文 ...

  4. FI配置步骤清单

    1.定义公司代码   配置路径: R/3定制IMG的实施指南>企业结构>定义>财务会计>定义, 复制, 删除, 检查公司代码 事务代码 EC01 2.编辑科目表清单   配置路 ...

  5. JDK8下maven使用maven-javadoc-plugin插件报错

    由于JDK8的doc生成机制比之前的要严谨许多,导致项目用maven打包的时候出错 解决办法: 添加-Xdoclint:none配置 完整配置如下:   <plugin> <grou ...

  6. IIS下众多网站,如何快速定位某站点日志在哪个文件夹?

    windows2008,iis 多站点, 日志.应用程序池都是默认设置, 没有分开………… Logs目录里面有W3SVC43,W3SVC44,W3SVC45,W3SVC46.....等等日志文件夹. ...

  7. InteliiJ IDEA的安装配置与简单使用

    小Alan前段时间一直在家里搬砖,已经很久没有接触技术了,从今天开始重拾技术,工欲善其事,必先利其器,以前在做Java开发的时候最常用的IDE就是Eclipse莫属了,不过随着岁月的流逝,在2016年 ...

  8. C#多线程的用法8-线程间的协作AutoResetEvent

    AutoResetEvent自动重置事件,与ManualResetEvent是相对的而言.它同样用于线程间同步,请对照<C#多线程的用法7-线程间的协作ManualResetEvent>进 ...

  9. jquery插件导出excel和pdf(解决中文乱码问题)

    参考文件:http://jackyrong.iteye.com/blog/2169683 https://my.oschina.net/aruan/blog/418980 https://segmen ...

  10. Oracle EBS OM 取消订单行

    DECLARE l_header_rec OE_ORDER_PUB.Header_Rec_Type; l_line_tbl OE_ORDER_PUB.Line_Tbl_Type; l_action_r ...