幻世(OurDream)2D图形引擎使用教程2——第一个幻世程序

原创 2013年12月06日 09:35:26

声明:本教程版权归Lizcst Software Lab所有,欢迎转载,但是转载必须保留本段声明文字,并注明文章来源:http://blog.csdn.net/kflizcst

谢谢合作!


一、概述:

        从本期教程开始,我们将逐步的了解开发基于幻世引擎的图形程序的步骤和方法。幻世引擎在使用上是非常简单易用的,这篇教程将指导大家开发一个空的幻世程序,以便为后续的教程打下基础,有了今天搭建好的基础,接下来学习幻世引擎的各项功能就会比较简单了。

 

二、着手:

        上篇教程我们已经知道了搭建幻世引擎开发环境的具体过程,本次我们将基于上篇了解到的知识,动手编写第一个幻世程序的代码,真正的让引擎动起来!

        [准备工作]

        1、首先,我们建立好相应的开发目录,同时将幻世引擎SDKC++开发所需的全部文件安排到开发目录下:

 

        目录的具体内容我就不多介绍了,这里需要说明下的是,我们建立了一个Debug目录用来保存编译好的幻世程序,在这个目录下,我们将幻世引擎的核心DLL文件(也就是SDK目录下的“bin”文件夹内的DLL模块)复制到了里面,这样当我们编写好代码并且完成程序的编译后,就可以直接运行Debug目录下的程序了。

        2、好了,现在我们打开VS2010,新建一个“Win32项目”,设定好“名称”、“位置”及“解决方案名称”后,单击“确定”:

 

        3、在弹出的Win 32应用程序向导中,我们选择“Windows 应用程序”,勾选“空项目”,并单击“完成”:

 

        4、这时我们便有了一个空的Win 32项目了,现在我们新建一个头文件,用于包含需要用到的幻世引擎的头文件及需要用到的幻世引擎库文件:

 

        5、接着我们为这个项目新建一个源文件,这个文件将会是我们的这个幻世程序的主要代码文件,所有我们将要编写的代码都会放到这个文件中,当然我们现在需要先包含我们上一步建立的头文件,这样我们的项目便可以访问幻世引擎提供的各种定义了:

 

        [代码编写]

        现在我们终于可以开始实际代码的编写了,设计基于幻世的程序,大体上的流程是:

        初始化引擎>>>获得引擎主要组件的接口>>>使用接口提供的功能函数>>>完成使用后停止并卸载引擎。

        接下来我们就按照这个流程介绍具体的开发方法。

        [初始化幻世引擎]

        引擎在使用前必须要进行初始化操作,初始化幻世引擎的过程很简单,只需要先创建一个引擎实例,然后使用其提供的初始化函数就可以进行初始化了。

        第一步,我们先定义一个全局的引擎对象,然后调用创建函数创建一个新的引擎实例:

 

        Create3D函数便是用来创建引擎实例的函数,它需要一个参数用以标明使用的引擎版本,直接使用宏OURDREAM2D_VERSION即可。在这里我们做了一下检测,以便检查引擎实例是否创建成功。

 

        在引擎实例创建成功后,我们通过调用引擎的Initialize函数执行引擎的初始化工作。该函数需要提供一个SOD2DSystemSetup的数据结构用于告知引擎按照何种要求来进行初始化。该数据结构的具体定义如下:

 

        解释:

        1、指定渲染器的类型,需要提供一个EOD2DVideoType的值,具体取值如下:

 

        由于当前仅存在DirectX 9渲染器,所以,这个值目前固定为EYVT_DIRECTX9

    

        2、指定幻世引擎将图像输出到的窗口的句柄,可以取0值,取0表示用户程序不提供窗口以供输出,引擎会在这种情况下自行创建一个窗口来完成图像的输出。如果指定有效的窗口句柄,则引擎会将画面输出到该窗口上。这里需要注意的是,引擎会尝试完全接管该句柄所指代的窗口中所有的事件处理过程(包括鼠标、键盘等的操作)。

        3、指定是否使用Z缓冲,对于2D图形来说,此功能可以不使用,即取false值。

        4、指定是否使用窗口模式,如果为false,那么将会以全屏方式运行(游戏程序也许需要)。

        5、指定是否使用模板缓存,对于2D图形来说一般不需要,取false值即可。

        6、指定是否隐藏系统的鼠标指针,通过隐藏系统的鼠标指针,可以让开发者自行创建或者绘制鼠标指针,这对于游戏程序来说是非常有用的。

        7、指定是否启用高精度浮点运算。

        8、指定是否启用垂直同步,可以让引擎更新屏幕图像的速度与显示器的刷新速度同步,这样可以解决某些图像撕裂问题。

        9、指定是否启用日志记录,该选项可以让幻世引擎将运行过程中的一些事件写到一个文本文件中,这样开发者便可以了解运行中的一些问题,方便排查错误。

       10、绘图窗口的宽度(分辨率),该值在窗口模式下用作绘图窗口的宽度(即使是开发者自行创建并指定给引擎使用的窗口,引擎也会按照这个值对其宽度进行调整),在全屏模式下作为横向分辨率使用。

       11、绘图窗口的高度(分辨率),该值在窗口模式下用作绘图窗口的高度(即使是开发者自行创建并指定给引擎使用的窗口,引擎也会按照这个值对其高度进行调整),在全屏模式下作为纵向分辨率使用。

       12、指定绘图时使用的颜色深度,只能取值1632,16即代表16位色,32代表32位色,取其他值会导致引擎初始化失败。

       13、指定纹理过滤方式,取值范围-1~8,其中-1为关闭纹理过滤,0为启用三线性过滤,1~8为启用各向异性过滤。

       14、指定图像抗锯齿强度,取值范围0~40为关闭抗锯齿。

       15、指定最大FPS(帧速率),指定该值后,引擎的帧速率将会被限制在此值以下,对于2D绘图而言,设定该值在合理范围,将可以大大减小硬件的负担,加快程序的反应速度。

       16、指定绘图窗口的图标文件位置,如果不需要使用,可以直接置为NULL

       17、指定绘图窗口的文字标题,可以置为NULL即使用默认的窗口标题(默认为“OurDream 2D Graphic Engine”)

       18、指定日志文件保存的位置,可以置为NULL,如果该值置为NULL,则第9项即使为true也无效。

 

       引擎初始化成功之后,便可以使用引擎接口提供的各种功能了。

       [获取渲染器]

       初始化成功引擎之后,我们就需要获得一个非常重要的接口,那就是渲染器接口。可以说,使用幻世引擎最主要的用途就是绘制各种需要的图形了,而绘制工作的直接完成者就是引擎的渲染器接口。

       获取渲染器接口非常简单,有引擎主接口的帮助,只需一行代码即可搞定,当然在此之前,我们先定义一个渲染器接口变量,用于稍后接收获取的渲染器接口:

 

        下面是如何获取渲染器接口:

 

        [定义循环函数]

        到此为止,需要使用的接口都已经获得了,但是现在程序还不能正常的运行,原因在于还有两个重要的参数没有提交给引擎,那就是“帧处理函数”和“帧渲染函数”。

    “帧处理函数”就是用来在每一次循环中,处理用户操作事件及程序逻辑运算的函数。通过该函数,引擎可以根据开发的要求,结合用户的操作,来完成内部逻辑的处理和计算。例如,在游戏中,就是关于AI、物理效果等等的运算,都可以由该函数来完成。

    “帧渲染函数”就是处理每一次循环中图像绘制的函数。开发者想要绘出的任何图形都应该交由该函数来完成。

这两个函数都是由开发者自定义的,必须在引擎进入工作循环前完成提交,否则引擎将无法正常运行。

由于我们的第一个程序没有任何其他处理需求,因此我们在这里只需要提交两个简单的函数即可:

 

       这是我们定义好的两个处理函数,可以看到FrameFun(帧处理函数)并不做任何处理只是简单的返回true,而RenderFun(帧渲染函数)也仅仅只是刷新下屏幕的背景颜色为黑色而已,并不绘制任何东西。

       接下来把他们提交给引擎即可:

 

       [进入工作循环]

       我们已经完成所有该准备的工作了,是时候让引擎执行循环的帧处理和帧渲染了,这是引擎实现图像动态变化及交互互动的最主要方法。

 

       [卸载及清理]

       很好,我们已经完成了让引擎运转起来的必要工作,到目前为止一切都很正常。然而,也许我们还忘了一个重要的工作需要去完成,那就是如果用户决定关闭程序该做些什么呢?既然引擎的运行需要初始化,那么关闭是不是也需要卸载呢?答案是肯定并且必须的!卸载操作用来归还引擎运行期间所占用的资源,清理所有使用过的资源,如果不进行这一步的操作,将会导致系统出现内存或资源泄露,对操作系统可能会造成不良影响,因此我们在使用完毕引擎之后,务必要进行卸载操作!

        这里有一个注意的事项,那就是在卸载引擎的主接口之前,必须先要卸载掉所有其他的通过主接口获取的接口,在本例中,我们通过引擎主接口获取了渲染器的接口,因此,我们应该先卸载渲染器然后再卸载引擎主接口:

 

        [编译生成]

        好了,全部的代码都已经完成了,是不是觉得很容易?现在就赶紧编译并且运行一下吧!下面是我们的程序的运行效果:

 

        引擎的LOGO :-)

 

 

        我们第一个幻世引擎!其实什么也不会绘制出来。

 

        [大功告成]

        第一个幻世程序完成了!欣喜若狂!我们的引擎动起来啦!黑乎乎的窗口,就像黑板一样,等着我们天马行空的画出心中的图案来!真是迫不及待的想要让它更具色彩一点!不要急,下一篇教程,我们就让黑板上,多一些色彩啦!

 

        [示例代码下载]

        本章教程的全部源代码下载:http://kuai.xunlei.com/d/BiIvAJlkoyahUgQA817

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

幻世(OurDream)2D图形引擎使用教程17——易语言编写幻世程序系列(1)

幻世(OurDream)2D图形引擎使用教程17,易语言开发教程系列(1)——认识幻世NOC!

幻世(OurDream)2D图形引擎使用教程7——处理操作输入(1)

幻世(OurDream)2D图形引擎使用教程7,介绍幻世程序如何处理用户的输入操作(1)。

幻世(OurDream)2D图形引擎使用教程1——认识幻世,构建幻世开发环境

介绍幻世(OurDream)2D图形引擎,并且知道如何搭建幻世引擎的开发环境。

幻世(OurDream)2D图形引擎使用教程11——播放媒体文件(1)

幻世(OurDream)2D图形引擎使用教程11,介绍幻世程序如何处理并播放媒体文件(1)。

幻世(OurDream)2D图形引擎使用教程10——处理操作输入(4)

幻世(OurDream)2D图形引擎使用教程10,介绍幻世程序如何处理用户的输入操作(4),本教程包含一个对绘图、按键处理的综合性演示。

幻世(OurDream)2D图形引擎使用教程5——绘制文字

幻世(OurDream)2D图形引擎使用教程5,介绍幻世程序如何绘制文字内容到屏幕。

幻世(OurDream)2D图形引擎使用教程6——使用纹理

幻世(OurDream)2D图形引擎使用教程6,介绍幻世程序如何绘制带纹理贴图的图形。

幻世(OurDream)2D图形引擎使用教程8——处理操作输入(2)

幻世(OurDream)2D图形引擎使用教程8,介绍幻世程序如何处理用户的输入操作(2)

幻世(OurDream)2D图形引擎使用教程12——播放媒体文件(2)

幻世(OurDream)2D图形引擎使用教程12,介绍幻世程序如何处理并播放更多格式的媒体文件以及播放动态视频(2)

幻世(OurDream)2D图形引擎使用教程4——基本图形的绘制

幻世(OurDream)2D图形引擎使用教程4,详细介绍幻世程序如何绘制基本的图形(第二部分)。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)