书接上文,我们非矩阵的方式绘制 是没有那么的精确的
在学习矩阵之前,我们先来了解下绘制的几种方法

绘制的几种方法和反外挂建议
第一种 hook d3d/opengl
优点:不闪 ,代码简单
缺点:非常容易被检测
第二种 窗口上自行绘制,但是会闪
优缺点适中
第三种 自建透明窗口,覆盖游戏窗口,透明窗口上绘制
优点:稳定
确定:代码复杂,会闪
反外挂:无非就是针对外挂使用的函数进行检测

深入学习矩阵

对象的世界坐标列向量
x
y
z
w(w为了兼容4*4矩阵以及可以NDC坐标转化而设计存在的,大家可以暂且不管)
可以通过被一个游戏矩阵(以后我们就叫他游戏矩阵吧) 乘 从而获得 剪辑坐标,也可以叫裁剪坐标,都是翻译而来(暂且当成屏幕坐标也没问题,因为他到屏幕坐标转换及其简单)
在学习这个矩阵之前呢我们先来了解
行主序和列主序

行主序就是拿44矩阵的行来 后面的矩阵,我们前面的例子 都是这样
a1 a2 a3 a4 * x = a1 x+ a2y+ a3z + a4w
b1 b2 b3 b4 y b1 x+ b2y+ b3z + b4w
c1 c2 c3 c4 z c1 x+ c2y+ c3z + c4w
d1 d2 d3 d4 w d1 x+ d2y+ d3z + d4w

而列主序就是 拿44 矩阵的列 来 后面的矩阵,这个前面没有出现过
a1 b1 c1 d1 * x = a1 x+ a2y+ a3z + a4w
a2 b2 c2 d2 y b1 x+ b2y+ b3z + b4w
a3 b3 c3 d3 z c1 x+ c2y+ c3z + c4w
a4 b4 c4 d4 w d1 x+ d2y+ d3z + d4w

那么我们现在了解下这个游戏矩阵都能对我们干嘛,给他拆分成几个功能
最后他是这几个功能的结合体而已

缩放位移矩阵

如果是行主序矩阵的话就是

编辑
添加图片注释,不超过 140 字(可选)

(1不是固定的 应该写成Tw )
如果是列主序矩阵的话就是
Sx 0 0 0
0 Sy 0 0
0 0 Sz 0
Tx Ty Tz Tw


x
y
z
w
等于
xSx+wTx
ySy+wTy
zSz+wTz
w*Tw
对矩阵 x y z w 进行了 缩放和位移
所以我们在这里知道 矩阵移动影响的主要是
Tx Ty Tz Tw
结论一: 我们在走路做位移的情况下,行主序最后一列 列主序最后一行 Tx Ty Tz Tw 会改变
当然不一定只有走路的时候会变
原因很简单,这个矩阵是各种操作的结合体
如以下例子:
只改变Y的情况下

编辑
添加图片注释,不超过 140 字(可选)

只改变X的情况下

编辑
添加图片注释,不超过 140 字(可选)

只改变Z的情况下

编辑
添加图片注释,不超过 140 字(可选)

XYZ混合改变的情况下

编辑
添加图片注释,不超过 140 字(可选)

旋转矩阵

简单证明下结论

编辑

切换为居中
添加图片注释,不超过 140 字(可选)

假设旋转45度

编辑

切换为居中
添加图片注释,不超过 140 字(可选)

用极限验证法,验证结果正确

编辑

切换为居中
添加图片注释,不超过 140 字(可选)

围绕Z轴 转动

编辑

切换为居中
添加图片注释,不超过 140 字(可选)

结论二:只转动水平朝向的时候 行主序第三列不变 ,列主序第三行 不变化
列主序如下

编辑
添加图片注释,不超过 140 字(可选)

围绕X 轴转动

编辑
添加图片注释,不超过 140 字(可选)

结论三:只转动高低朝向的时候 行主序第一行不变 ,列主序第一列 不变化
列主序如下

编辑
添加图片注释,不超过 140 字(可选)

围绕Y 轴转动 我们没有这种情况的时候

编辑

切换为居中
添加图片注释,不超过 140 字(可选)

开倍镜

编辑
添加图片注释,不超过 140 字(可选)

总结矩阵6条结论
第一结论: 行主序最后一列 列主序最后一行 走路 跳的状态会改变,不代表别的动作不改变
第二结论: 水平转动的情况 行主序第三列不变 列主序的话第三行不变
第三结论: 高低朝向改变的时候 行主序第一行不变 列主序的第一列不变
第四结论: 矩阵第一个值 -1 到1 的, 这个绝对吗 不绝对!
第五结论: 行主序 第一个行第3个元素 是固定的0 列主序 第一列的第三个元素是0 不绝对!
第六结论: 我们开倍镜 第一个值 会* 相应的倍数 不绝对!

编辑
添加图片注释,不超过 140 字(可选)

通过找到的矩阵可以进一步完善结论

通过以上的规律 CE 搜到如下矩阵地址
矩阵地址
hl.exe+1820100
这个过程文字很啰嗦,只能视频里见了,无非根据以上结论 扫描而已

世界坐标 ->剪辑坐标->NDC坐标->屏幕坐标

那么我们来了解下坐标的转换过程
通过以上的矩阵
世界坐标 ----> 剪辑坐标

a0 a1 a2 a 3

a4 a5 a6 a7

a8 a9 a10 a11

a12 a13 a14 a15

x
y
z
w

剪辑坐标 x = a0x +a4y + a8z + a12w
剪辑坐标 y = a1x +a5y + a9z + a13w
剪辑坐标 z = a2x +a6y + a10z + a14w
剪辑坐标 w = a3x +a7y + a11z + a15w

世界坐标按照我们之前的矩阵法则转换成了平面的剪辑坐标
但是剪辑坐标是和分辨率没有直接关系的 ,需要我们进一步转换

剪辑坐标坐标系如下 正中心为0,0

编辑

切换为居中
添加图片注释,不超过 140 字(可选)

剪辑坐标---->NDC坐标

矩阵的设计中w 是可以让剪辑坐标范围到-1和1的 也就成了NDC坐标
所以NDC坐标很好理解,就是 -1到1的平面坐标系 中心点为0,0
NDC .x = 剪辑坐标 x/剪辑坐标 w
NDC.y =剪辑坐标y/剪辑坐标 w
NDC.z =剪辑坐标z/剪辑坐标 w

DNC坐标---->屏幕坐标

有了DNC坐标我们可以很容易转换成屏幕坐标了
当然屏幕坐标不止一种形式
我们现在只以CS为例
后面会有其他类型

编辑

切换为居中
添加图片注释,不超过 140 字(可选)

DNC.x / 1 = 屏幕坐标差.x / 分辨率_宽 /2
屏幕坐标差.x = (分辨率_宽 /2) * DNC.x
屏幕坐标.x = (分辨率_宽 /2) * DNC.x + 分辨率_宽/2

DNC.y / 1 = 屏幕坐标差.y / 分辨率_高 /2
屏幕坐标差.y = -(分辨率_高 /2)*DNC.y
屏幕坐标.y= -(分辨率_高 /2)*DNC.y + 分辨率_高 /2

矩阵绘制

最终代码如下
再用之前的代码 只把世界坐标转屏幕坐标_非矩阵() 改成世界坐标转屏幕坐标() 就可以实现功能了
其实也是我们之前的代码设计的比较合理
这样 只要替换一句命令,其他指令完全不影响

bool 绘制::世界坐标转屏幕坐标(坐标结构_3 游戏坐标,坐标结构_2& 屏幕坐标)
{
取窗口信息();
memcpy(&m_矩阵, (PBYTE*)m_矩阵地址, sizeof(m_矩阵));
坐标结构_4 裁剪坐标;
裁剪坐标.x = 游戏坐标.x * m_矩阵[0] + 游戏坐标.y * m_矩阵[4] + 游戏坐标.z * m_矩阵[8] + m_矩阵[12];
裁剪坐标.y = 游戏坐标.x * m_矩阵[1] + 游戏坐标.y * m_矩阵[5] + 游戏坐标.z * m_矩阵[9] + m_矩阵[13];
裁剪坐标.z = 游戏坐标.x * m_矩阵[2] + 游戏坐标.y * m_矩阵[6] + 游戏坐标.z * m_矩阵[10] + m_矩阵[14];
裁剪坐标.w = 游戏坐标.x * m_矩阵[3] + 游戏坐标.y * m_矩阵[7] + 游戏坐标.z * m_矩阵[11] + m_矩阵[15];

if (裁剪坐标.w < 0.0f)
{return false;
}坐标结构_3 NDC;
NDC.x = 裁剪坐标.x / 裁剪坐标.w;
NDC.y = 裁剪坐标.y / 裁剪坐标.w;
NDC.z = 裁剪坐标.z / 裁剪坐标.w;屏幕坐标.x = (m_分辨率宽 / 2) * NDC.x + m_分辨率宽 / 2;
屏幕坐标.y = -(m_分辨率高 / 2) * NDC.y + m_分辨率高 / 2;return true;

}

编辑

切换为居中
添加图片注释,不超过 140 字(可选)

这次不用微调就已经 精确了吧?
所以证明矩阵确实算的比较准确而且帮我们省掉了大量计算的时间

到这里,你的基础算过了
迎接后面真正的学习吧!

参考视频:链接: https://pan.baidu.com/s/1dN63zxgQECeeH1lzQ1P9cg 提取码: dgs9

任鸟飞FPS类型游戏绘制,骨骼,u3d,UE4和游戏安全,反外挂研究 (三)相关推荐

  1. 任鸟飞FPS类型游戏绘制和游戏安全,反外挂研究(一)

    本套课程主题为 FPS类型游戏的设计研究和游戏安全,反外挂研究 学习这套课程的基础包含少量的汇编知识和编程知识, 一定的数学知识和内存知识 基础建立在 任鸟飞2020课程 前100课的前提下即毫无压力 ...

  2. 任鸟飞FPS类型游戏绘制和游戏安全,反外挂研究(二)

    我们接着上文继续,如果没有看上文基础的同学建议先看完上文再继续本文章 本文章中均以单机游戏为例,每一种功能仅提供给网络安全工作者反外挂建议和安全对抗方法.请勿用作非法用途 另外提示对于此类游戏安全和反 ...

  3. FPS之游戏绘制(六)

    1.GDI外部绘制 这种绘制方式最为常见,游戏也不容易检测出,创建GDI设备在指定的窗口句柄上绘制,占用CPU很小,但是绘制到游戏里面会闪烁,原因是游戏FPS刷新频率与gdi绘制频率不同导致画出的方框 ...

  4. 知物由学 | 驱动反外挂另辟蹊径,让游戏避免看不见的漏洞攻击

    工欲善其事,必先利其器.游戏攻防对抗亦是如此,外挂作者通过各种工具提升游戏破解效率,通常防御方会根据其工具特性针对性防御.此种场景下的防御似乎总是后人一步. 难道就没有好的办法了吗?为了解决这个痛点, ...

  5. 游戏外挂反外挂技术简介

    1.游戏外挂分类: ⑴按实现方式 ㈠脱机式: 完全脱离游戏客户端程序,可以与游戏服务器自由通讯的外挂程序,开发难度最大, 普通的100多开,对游戏的危害最大 ,严重破坏游戏市场.影响玩家正常游戏.缩短 ...

  6. 游戏反外挂技术原理讲解

    永远在路上 没有破解不了的反外挂系统,反外挂是一个对抗过程,需要不断升级.我们反外挂小组会采取对抗方式提升防御,也会研究竞品来获取灵感.反外挂也是非常有意思的,可以学到很多很多底层知识. 善战者无赫赫 ...

  7. 游戏反外挂技术首次公开

    万字长文!inlinehook看这一篇足够了! 远程线程+hook=监控? 硬件断点 硬件断点hook 实战!谁动了我的代码! 前面的文章,我们介绍了inline hook.硬件断点hook.远程线程 ...

  8. 福禄科技罗宇翔:OpenResty 游戏反外挂应用

    2019 年 5 月 11 日,OpenResty 社区联合又拍云,举办 OpenResty × Open Talk 全国巡回沙龙武汉站,福禄科技服务端研发工程师罗宇翔在活动上做了< OpenR ...

  9. 游戏外挂原理基础18反外挂方案

    所谓知己知彼方能百战不殆,要想减少或避免外挂对游戏的侵害,必须从根本上知晓外挂的原理,及其常用的技术手段,从而在技术手段上对其进行封堵. 一.外挂的分类 外挂一般的分为2类,脱机式 和 内挂式. 脱机 ...

  10. 一般游戏的反外挂保护方案

    所谓知己知彼方能百战不殆,要想减少或避免外挂对游戏的侵害,必须从根本上知晓外挂的原理,及其常用的技术手段,从而在技术手段上对其进行封堵. 一. 外挂 的分类 外挂一般的分为2类,脱机式 和 内挂式. ...

最新文章

  1. JPPhotoBrowserDemo--微信朋友圈浏览图片
  2. EOS入门指南PART6——别忙着开发,先来看看智能合约数据是怎么存的
  3. 08年1月Gartner商务智能平台魔法四分区
  4. 世界硬币:比特币类似的评分系统!
  5. 微信小程序 --- 页面跳转
  6. .NET Core实战项目之CMS 第四章 入门篇-Git的快速入门及实战演练
  7. WPF疑难杂症之二(全屏幕窗口)
  8. Python3 爬虫学习笔记 C05 【Selenium + 无界面浏览器】
  9. 30岁程序员吐槽:一分钟只能赚3.3元,混得太差!算出月薪后我服了
  10. js如何监听元素事件是否被移除_javascript:什么是js事件?(上)
  11. oracle数据库自动备份控制文件的目录,16.5 控制文件的自动备份和还原(1)
  12. java switch finally_Java中的switch疑问
  13. Oracle练习:用表连接实现查询平均工资最高的部门信息
  14. Version 28 (intended for Android Pie and below) is the last version of the legacy support library, s
  15. JAVA测试题-定义一个运动员(Sportsman)类,包含姓名(name)、跳高(highJump)
  16. Oracle函数执行提示“ORA-01422”,“ORA-06512”错误
  17. Java类包的定义(package)
  18. 升级到win11后VMware不能开启虚拟机了
  19. 矩阵求导技巧-YX拉伸法
  20. 用前端技术实现一个脸萌

热门文章

  1. 大道至简:智能语义检测的武林
  2. 读书百客:《游终南山》赏析
  3. LibreOJ - 10066 新的开始
  4. HOUR 11 Developing Advanced Pointers
  5. 魔兽怀旧玩家显示服务器名称插件,新手必看:非插件相关的魔兽怀旧服常用系统设置...
  6. 20.4版本Ubuntu中部署LAMP环境,部署论坛discuz
  7. 360全景拍摄中相机的白平衡设置
  8. Android仿iOS左右滑动开关控件(Android4.0以上适用)
  9. 域名申请+云服务器购买+花生壳内网穿透+myeclipse web 登录
  10. 《写作是门手艺》读书笔记