FPS之游戏绘制(六)

14 篇文章 25 订阅
14 篇文章 6 订阅

1.GDI外部绘制 这种绘制方式最为常见,游戏也不容易检测出,创建GDI设备在指定的窗口句柄上绘制,占用CPU很小,但是绘制到游戏里面会闪烁,原因是游戏FPS刷新频率与gdi绘制频率不同导致画出的方框会闪烁。
2.GDI双缓冲
这种绘制方式有一部分和外部绘制相同,但是又不同,这种绘制方式不会使方框闪烁,但是占用CPU极高,原理是申请一块与游戏高度宽度相同的内存,把这块内存作为内存画布使用,把绘制的方框画到这块内存画布中,然后获取游戏的窗口句柄,使内存画布中的图像和游戏屏幕来回替换,这种绘制方式占用CPU,但是绘制效率很高,方框也不会闪烁,电脑配置高的可以研究下这种绘制方式。
3.GDI窗口绘制
这种绘制原理和第一种一样,只不过不是绘制到游戏窗口,而是自己创建一个窗口,把方框绘制到这个窗口上,绘制效率快而且不易被检测,内存占用很小,但是有一个缺点,就是窗口不会自己刷新,需要自己写一个刷新窗口,使刷新窗口的频率大于等于gdi绘制频率,这样就窗口上的绘制内容就是连续的了,大家可以用这种绘制方式画方框,国外有一个FPS方框透视就是用这种原理,至于写法比这个精湛多了。
4.D3Dhook绘图
大家都知道3D游戏的图形接口有2种,DirectX和OpenGL,大部分的FPS游戏都是用DirectX引擎,所以我们可以通过hook DirectX设备接口函数来绘制方框,这种绘制方式不占CPU,不闪烁,但是易被检测,DX设备会在内存中申请2块空间作为缓存区A和缓存区B,DirectX设备会在缓存区A中绘制图形,绘制图形的原理是通过绘图函数比如DX11的DrawIndexed,通过这个函数的参数我们可以看出它是根据索引缓存绘制一个非实例化的图形,在设备创建到初始化再到绘制图形,这一系列全部完成后DX11设备会用present把缓存区A映射到缓存区B,让缓存区B作为游戏屏幕并呈现场景,这样缓存区A与B来回映射达到游戏画面不断更新,所以我们可以hook掉present函数,并获取设备指针引入自己的绘图函数,这种绘制方式肯定不会闪烁,因为游戏使用的就是d3d图形接口,我们绘制方框的函数是在这个接口内游戏FPS刷新频率和绘制方框频率肯定是一样的,现在大部分FPS游戏都对present加了检测。

以上就是我总结四种绘图方式,可能有一点错误,毕竟是自己手写的,当然还有不同的绘制方式,也可以与我交流,说了一大堆就是给不会绘制的朋友们给个思路,大佬的话看看不说话就可以了,欢迎朋友们来评论。

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值