现在的位置: 首页 > 综合 > 正文

用WPF和D3D开发游戏编辑器简介(1)

2012年10月24日 ⁄ 综合 ⁄ 共 1406字 ⁄ 字号 评论关闭
文章目录

     第一篇CSDN博客,想介绍下我在今年工作之余开发的一个简单的游戏引擎和编辑器。由于我从事游戏引擎开发工作,平时总是需要研究一些新的东西,比如尝试一些新的特效,研究其他游戏的思路等等,这就需要一个自己的引擎。同时在开发引擎的过程中,结合游戏的需要,自然想到了同时开发一个灵活的编辑器,编辑器不受引擎功能的限制,不受界面开发复杂度的限制等等。在半年多的时间里,完成了一个简单引擎和编辑器。

    开发所用工具为VS2010,引擎设计为支持多渲染系统,目前实现的是dx9,不依赖dx9小版本,编辑器部分使用WPF,也就是.net framework 4.0。

    游戏引擎

     定位为3D,尽量灵活易改动,架构清晰,效率高,目前实现了D3D9的固定管线和硬件蒙皮Shader,支持wow的模型格式(当然是参考wowmodelviewer)。包括:

     (1) 基础库: vector, matrix, line, quaternion, plane, box, 定长string等基础类

     (2) IO: 文件读写, 资源管理,资源缓存,基于引用计数资源,资源池

     (3) 场景: 场景管理器,场景结点,场景渲染

     (4) video: 渲染层抽象, 图像,字体,材质,mesh,纹理等等与渲染直接相关的部分

     此外包括引擎初始化,分配器,wow的格式解析等等。引擎依赖freetype库(字体),libmpq(解析mpq文件).

     引擎的设计来源于我理解的一个抽象:引擎可以理解为 io处理静态资源如mesh,场景管理n个动态的mesh,动态mesh逻辑渲染转化为n个实际渲染(材质+纹理+Draw)。再定义引擎的接口部分,设计的原则是每个类完成一个有独立概念的任务,如IDrawServices(提供绘画服务,画线,画2d图片等),IHardwareBufferServices(提供硬件缓存管理)。下面给一个引擎的结构图和效果图:

                  

 

     游戏引擎编辑器

       编辑器用WPF实现,WPF的界面开发效率高,定制控件界面容易,显示效果美观,此外种种的WPF特性都可以用在游戏编辑中。难点可能在于与引擎C++语言的通信和3D渲染帧逻辑在WPF下的实现。第一个问题我使用P/Invoke将C++导出C函数再由C#调用的方法,第二个问题使用hwndHost用非托管的window创建引擎再组合到WPF中。编辑器结构为:

       (1) mywow_dll:工程的任务是定义编辑器所需的C接口,包装引擎的C++函数,同时可增加一些判断和逻辑代码,同时也把lib库形式的引擎变为dll供编辑器使用

       (2) mywowNet: C#接口,定义与逻辑上的类,使用mywow_dll导出的c函数,做一些属性转换(get,set变为property),C#结构和C结构的转换(P/Invoke直接序列化转换)

       (3) 各种辅助wpf界面工具: AvalonDock(停靠窗口),WpfPropertyGrid(WPF属性框),主题,颜色框等等,WPF开源界面库很丰富:)

       (4) 有了上面这些,接下来就是组合起来做个编辑器了,设计界面,定义控件,组合游戏逻辑,界面和逻辑代码分离,WPF特性等等...

       编辑器结构图和效果图:

               

    

 

 

抱歉!评论已关闭.