看流星社区

 找回密码
 注册账号
查看: 8611|回复: 6

提供FPS方框透视四种绘制方式

[复制链接]

该用户从未签到

发表于 2018-3-1 17:36:12 | 显示全部楼层 |阅读模式
FPS方框透视四种绘制方式,给大家提供绘制最佳方框的思路。
购买主题 已有 11 人购买  本主题需向作者支付 20 流星币 才能浏览

该用户从未签到

发表于 2018-6-11 00:06:37 | 显示全部楼层
我的天 要这么多币的吗
  • TA的每日心情
    难过
    2024-3-26 12:00
  • 发表于 2018-10-3 05:59:00 | 显示全部楼层
    分享吧  只是结论  我以为会稍微给点步奏的  后面注意点吧  
    FPS方框透视四种绘制方式,给大家提供绘制最佳方框的思路。
    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加了检测。

    该用户从未签到

    发表于 2018-12-6 15:25:38 | 显示全部楼层
    楼主学习了,加油

    该用户从未签到

    发表于 2019-7-24 12:05:29 | 显示全部楼层
    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加了检测。

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

    该用户从未签到

    发表于 2020-3-5 16:55:57 | 显示全部楼层
    hhhhhhhhhhhhhhhhhhhhhhhhh

    该用户从未签到

    发表于 2020-3-25 22:23:22 | 显示全部楼层







    点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
    您需要登录后才可以回帖 登录 | 注册账号

    本版积分规则

    小黑屋|手机版|Archiver|看流星社区 |网站地图

    GMT+8, 2024-4-19 05:37

    Powered by Kanliuxing X3.4

    © 2010-2019 kanliuxing.com

    快速回复 返回顶部 返回列表