• HGE核心绘图解决方案


      在【【HGE】绘图底层】这个帖子里面有些地方需要更正。

      为了不误导别人,这里有必要补充一下:

      HGE每次绘图都需要锁定一次缓冲区,只适合绘制大量相同的图片,如果是各种不同的图片,问题就出来了。如果绘制一百张图片就需要锁定和解锁各一百次。了解D3DAPI编程的人明白这是个什么问题。所以现有的HGE绘图算法是完全不适合大型游戏的。

      有些人看到HGE自带例子中绘制2000个sprite FPS达200-300以上就以为是正确的,不要忘记绘制的图片都是同一张图片。这个问题是网上一位朋友首先发现的。

      这里给出解决方案:

      首先删除HGE原有的渲染函数,一个都不要留。

      然后制作出一个添加数据的函数,函数调用之前,进行锁定操作,但是只需要锁定一次。

      可以不断调用这个函数把四边形数据复制入顶点缓冲区里面。全部复制完毕解锁。

      也许你以为跟HGE原来的复制一次就锁定一次是一样的,那么就要仔细思考了。

      这里只锁定一次,以后的调用的是不需要锁定的,但是需要在锁定的状态下复制数据。

      全部复制完毕之后解锁就行。因为对数据的更新就按照设定的时间来操作。

      网络游戏为了同步肯定需要设定一个同样的数据更新时间。

      那么在不需要更新的时间内,是不需要对数据进行复制的。

      那么原来的一帧时间内锁定一千次,一千张图片需要绘制,现在我们在好几帧的时间内才需要锁定一次,而且是大批量地复制各种不同的图元数据,这个数量的对比就可想而知了。

      如果你不了解关于顶点缓冲区锁定操作不当会带来什么问题,可以在网上搜索,很容易得到结果。

      而且我把顶点缓冲区的创建和锁定方式全部修改了。以适合数据大批量地复制的要求。

      在大部分渲染的时间内,显卡GPU直接读取缓冲区的所有数据进行批量地渲染,CPU只需要做很少的工作。使用高级着色和HLSL技术,也许CPU更空闲。

      就是说渲染函数和逻辑函数分开处理。

      客户端的绘图核心是绘图算法架构。研究这方面的人很少,原因只有一个,大量程序员缺乏商业游戏实践的开发经验。

      对游戏没有深入地了解,哪怕你的编程技术世界上第一,在游戏开发的面前也只是白痴一个。

      绘图核心只有一个目的,在大量的场景中绘制大量的图元和大量的特效的时候,游戏的流畅性完全不受到影响。

      玩过盛大传奇和传奇世界的人都知道,在攻城的时候在皇宫里面那种走一步卡半天的感受就了解了。

      不要认为二维游戏不值得研究,那么你永远都不可能做成成功的三维游戏,因为实际绘图核心是一致的。

      不以为三维游戏就肯定不同了。哈哈~~

      思路已经给出,大牛很容易修改出来。

      当然修改成功之后,你可以不用HGE这个名称了。因为其它方面其实都是D3D架构的常用设置。

  • 相关阅读:
    g++
    Adapter
    使用 JDBC 连接MySQL 、SQL Server数据库
    Chrom Firefox 非安全端口访问
    Cent OS & Windows 双系统自定义引导菜单
    Cent OS 7 安装海峰、极点五笔输入法
    数据结构:单链表
    切记要初始化指针
    Java 连接 MySQL 数据库
    C语言 Struct 结构体在 Java 中的体现
  • 原文地址:https://www.cnblogs.com/GameDelphi/p/2406829.html
Copyright © 2020-2023  润新知