• KlayGE游戏引擎


     

    概览

    KlayGE是用于下一代游戏的一个完整的游戏开发框架。它是API无关的插件式结构,提供了很多先进技术,并且有无限的扩展性。

    KlayGE的设计目的非常明确,用最先进的技术武装引擎。它所提供框架使游戏的开发、测试、移植得到简化。KlayGE的目标平台是当年发布的最高硬件到前一年发布的最低硬件。

    图形

    • 支持D3D11,OpenGL和OpenGL ES 2
    • 采用fxml作为可渲染物体的特效脚本,可以直接把美工生成的特效导出使用
    • Python脚本可以在运行期动态解释,所以修改脚本以后不需要重新编译
    • 可以通过height map来建立地形场景
    • 支持骨骼动画
    • 硬件Occlusion culling
    • 粒子系统
    • Post processing技术
    • 自适应硬件状态缓存和延迟更新机制
    • 支持逐像素光照和渲染技术
    • 基于distance的字体系统,兼有矢量和点阵的优点
    • 支持Procedural texture
    • 支持Subsurface Scattering,可用于渲染树叶、皮肤、玉器等半透明材质
    • 支持PN Triangles技术,在运行期自动光滑低模
    • 着色
      • 包含常用操作的shader库
      • 完全抽象出图形API
      • 多遍渲染
      • 完全支持可编程着色
      • 可以使用多条渲染流
    • 光照
      • 动态光照
      • 全方向shadow map

    音频

    • 支持各种平台的音频输出
    • 支持3D声音定位和多普勒效应
    • 输入格式支持Ogg Vorbis
    • 支持流式播放

    工具

    • 法线图生成器,可以从高度图生成法线图
    • 距离图生成器,可以从高度图或3D纹理生成距离图
    • MeshML导出插件,从3DS Max导出模型
    • OpenGL兼容性检测工具
    • HDR压缩器,支持cubemap和2D HDR纹理的压缩
    • Normal map压缩器,2:1或4:1的压缩率
    • 基于distance的字体生成器,可以把矢量字体转换成引擎使用的字体格式
    • FXML2Shader工具,把FXML的特效脚本转换成HLSL或Cg

    程序特性

    • 引擎是开放源代码的,包含了100%的引擎、工具的源代码
    • 可扩展的、面向对象的C++引擎,带有用于静态和动态加载代码和资源的软件架构,易于移植和调试
    • 用Python作为脚本语言,提供了对动态数据的自动支持,开发调试方便,并很容易和C++主程序配合工作

    目录

    1. KlayGE是什么?
    2. KlayGE是你一个人开发的吗?
    3. 哪里能找到KlayGE的文档?
    4. 为什么选择了GPL?
    5. 为什么用Python而不是LUA?
    6. 为什么必须要有Shader Model 2.0及以上?
    7. KlayGE的网络部分如何?
    8. 编译例子的时候出现像这样的连接错误信息:“libcmtd.lib(dbgheap.obj) : error LNK2005: __CrtSetDbgFlag 已经在MSVCRTD.lib(MSVCR80D.dll) 中定义”,请问如何解决?
    9. Boost编译的时候应该用什么参数?
    10. 为什么在Visual Studio里运行例子的时候ResLoader::Load出现assert failed?
    11. 在编译的时候提示”‘yasm’ is not recognized as an internal or external command, operable program or batch file.”,如何解决?

    问:KlayGE是什么?

    答:KlayGE是一个开放源代码、跨平台的游戏引擎。它是用C++开发的,并使用Python作脚本语言。KlayGE在GPL协议下发行。

    回到目录


    问:KlayGE是你一个人开发的吗?

    答:是的。几乎所有的开发都是我一个人完成的。但在这个过程中使用了一些第三方的代码,比如7zip的解码部分。不少朋友也在开发的过程中给予了不可或缺的帮助。

    回到目录


    问:哪里能找到KlayGE的文档?

    答:目前KlayGE的文档仅限于Documentation下的文件。文档缺乏的原因主要是我没有足够的时间去写,另外我更希望用代码本身来自我诠释。

    回到目录


    问:为什么选择了GPL?

    答:在KlayGE 2.7之前使用的是LGPL协议,但后来为了保护它不被某些专有软件吞并,所以换成了GPL。

    回到目录


    问:为什么用Python而不是LUA?

    答:KlayGE 2.0之前(当时还叫作Clay! Engine),LUA是首选的脚本语言。LUA的优点是速度快,缺点是在C++中的调用极其麻烦,而且语言本身能力较弱。Python速度不如LUA, 但是语言能力强大得多,也不必写成栈式的调用方式,简洁得多。在KlayGE中,脚本不是为了效率而存在的,所以Python成了不二之选

    回到目录


    问:为什么必须要有Shader Model 2.0及以上?

    答:KlayGE是一款面向高端的引擎,所以在一定程度上要用较高的配置,以满足先进技术的需要。另一方面,Shader Model 2.0并不算一个很高的要求,市面上的新显卡几乎都是支持Shader Model 3.0的。对于游戏开发者来说,如果现在还在使用不支持Shader Model 2.0的硬件,那只能说实在落后得太多了。

    回到目录


    问:KlayGE的网络部分如何?

    答:KlayGE中的网络是弱项,甚至可以说几乎无法使用。所以需要重新开发,或者使用别的网络库。

    回到目录


    问:编译例子的时候出现像这样的连接错误信息:“libcmtd.lib(dbgheap.obj) : error LNK2005: __CrtSetDbgFlag 已经在MSVCRTD.lib(MSVCR80D.dll) 中定义”,请问如何解决?

    答:由于KlayGE在VC下使用的运行库是多线程的DLL,所以需要把所有连接到exe的lib的运行库改为 多线程DLL(Project- >Properties->Configuration Properties->C/C++->Code Generation->RuntimeLibrary,选择Multi-threaded Debug DLL/Multi-threaded DLL)。

    回到目录


    问:Boost编译的时候应该用什么参数?

    答:Boost 1.36的编译参数可以通过bjam的命令行参数来设置,可以写一个批处理文件,内容是:

    SET BZIP2_SOURCE="D:/bzip2-1.0.5"
    SET ZLIB_SOURCE="D:/zlib-1.2.3"
    SET ICU_PATH="D:/icu4c-3_6"
    bjam --toolset=msvc-9.0 --stagedir=./lib_vc9_x86 --builddir=./ address-model=32 link=shared runtime-link=shared threading=multi cxxflags=-wd4819 cxxflags=-wd4910 define=_CRT_SECURE_NO_DEPRECATE define=_SCL_SECURE_NO_DEPRECATE define=_SECURE_SCL=0 stage debug release
    bjam --toolset=msvc-9.0 --stagedir=./lib_vc9_x64 --builddir=./ address-model=64 link=shared runtime-link=shared threading=multi cxxflags=-wd4819 cxxflags=-wd4910 define=_CRT_SECURE_NO_DEPRECATE define=_SCL_SECURE_NO_DEPRECATE define=_SECURE_SCL=0 stage debug release

    直接在boost的目录下运行这个批处理就可以编译出dll版本的boost库。

    回到目录


    问:为什么在Visual Studio里运行例子的时候ResLoader::Load出现assert failed?

    答:需要在Visual Studio中把工程的Working Directory设置成$(OutDir)。此问题在KlayGE 3.10中不再出现。

    回到目录


    问:在编译的时候提示”‘yasm’ is not recognized as an internal or external command, operable program or batch file.”,如何解决?

    答:根据设置,Visual Studio的编译工具必须能调用yasm才能编译.asm的文件。解决方法之一是把下载下来的yasm-X.X.X-winYY.exe(X表示版本 号,YY表示32或64)改名成yasm.exe,并拷贝到VC的bin目录下,比如”C:Program FilesMicrosoft Visual Studio 9.0VCbin”。(注:这个问题实际上不该出现在本FAQ中,因为这其实是个命令行调用的问题,谁都该会的。可悲于国内“开发者”的素质,竟然有 不少人都问了我该问题,使得我不得不将它写在这里。)此问题将在KlayGE 3.11中避免。

    愿望列表

    From KlayGE

     
    Jump to: navigation, search

    这里列出了一些希望以后能加入KlayGE的功能。

    愿望列表可以用来激励未来的工作。其中有些是很明确的做法,有些只是飘渺的想法,大部分则介于两者之间。同样,实现这些条目的工作量从对现有接口的小修改到大的研究项目都有。

    Contents

    [hide]

    愿望列表

    矢量纹理

    直接在texel上存储矢量参数,字体系统也可以建立在其之上。

    软件渲染插件

    类似于D3D10的软件渲染插件,用纯软件支持D3D10+的所有功能。

    基于HTML5的UI

    集成HTML5渲染器,可以直接用HTML5来作为UI的表达方式。

    地形渲染

    大规模地形渲染。

    去除DirectShow

    不使用DirectShow来播放视频和音频。备选方案之一是用.ogm作为容器格式,Theora作为视频编码,Vorbis作为音频编码,同时也支持字幕。

    GPU上进行物理和数学计算

    提出人:吴野

    GPGPU的物理模拟和线性代数计算。

    实时全局光照

    提出人:吴野

    实时计算全局光照。支持阴影、折射、反射、半透明和多次散射。

    强大的内存管理器

    支持跨越DLL边界的内存分配/清除、泄露检测和内存池。最好能Lock-free或Wait-free。

    GPU音频处理

    通过GPU处理音频(3D、特效),然后传给声卡播放。

    Command buffer的记录和重放

    把所有的DX/OGL API调用都在一个线程里捕捉,并可以在其它线程里重放。

    实时Catmull-Clark细分

    提出人:周波

    实现Approximating Catmull-Clark Subdivision Surfaces with Bicubic Patches的GPU细分算法

    正在做的

    基于GPU的细分

    在D3D11/D3D10(ATI)上支持硬件的细分,在D3D9/OpenGL上支持基于shader的细分。(D3D11的细分已经支持了)

    移动平台支持

    OpenGL ES 2.0插件和D3D mobile插件。(OpenGL ES 2.0插件已经完成)

    已经完成

    延迟着色

    延迟着色的渲染系统,支持抗锯齿和透明。(作为KlayGE 3.8.0的一个例子

    深度剥离

    顺序无关的透明。(作为KlayGE 3.7.0的一个例子

    屏幕空间环境遮挡

    SSAO来增加暗处的细节。(作为KlayGE 3.8.0的一个例子

     

    KlayGE 3.12.0在上半年的最后一天发布了!本版的亮点是支持实时全局光照。主要更新如下:

    • 支持全局光照
    • 包含第三方库及其编译脚本
    • 增加了Maya导出插件
    • 支持Dual Paraboloid Shadow Map
    • 增加了多种模式的BC1-BC5纹理压缩函数
    • 增加了cmake工程脚本
    • 支持Filmic tonemapping
    • 支持FXAA和Temporal AA

    KlayGE 3.12.0的很多功能是由组员完成的。感谢吴彧文提供的GI,感谢王锐朱晓阳honyeung Lau提供的Maya插件,感谢张亚川提供的DPSM,感谢陈顺斌郭鹏提供的FXAA和Temporal AA,感谢王锐提供的cmake工程脚本。更感谢大家这么多年来的支持和帮助!

    此处下载KlayGE 3.12.0。

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

  • 相关阅读:
    二叉排序树
    索引顺序表查找(分块查找)
    wpf中的窗口
    递归算法以及汉诺塔
    Net中资源存储的设置
    AutoResetEvent 和ManualResetEvent
    WPF:跨应用程序会话保持和还原应用程序范围的属性
    Base64编码及其作用
    WPF中的应用程序级别Application
    Ajax经典学习教材,IBM官方Ajax教材
  • 原文地址:https://www.cnblogs.com/skiwnchiwns/p/10345541.html
Copyright © 2020-2023  润新知