游戏安全-FPS游戏方框绘制基本原理

admin 2025年4月2日23:05:50评论1 views字数 993阅读3分18秒阅读模式
计算机图形学基础
把建模时构建好的3D物体显示在2D屏幕上,这就涉及到物体在不同坐标系中坐标的转换。
(物体/建模坐标系 ---------> 屏幕坐标系)

坐标系

在游戏中涉及到各种坐标空间和对应的坐标系

游戏安全-FPS游戏方框绘制基本原理

游戏中通过建模完成的3D物体要想在2D屏幕上显示出来需要进行坐标的转换。

游戏安全-FPS游戏方框绘制基本原理

矩阵变换

物体在一个三维坐标系中要想变换到另一个三维坐标系中需要通过矩阵乘法(与一个特殊的矩阵相乘),得到在另一个三维坐标系中的坐标。三维空间中某点的变换可以表示成点的齐次坐标与四阶的三维变换矩阵相乘 。

游戏安全-FPS游戏方框绘制基本原理
游戏安全-FPS游戏方框绘制基本原理

D3D和OpenGL的矩阵存储

D3D中会将对应的线代矩阵利用数组按行存储(行主顺),OpenGL中会按列存储(列主序)。

游戏安全-FPS游戏方框绘制基本原理

FPS游戏逆向思路

我们利用CE附加游戏后我们可以找到人物在世界坐标中的世界坐标(x1,y1,z1),要想在屏幕上画出人物边框就需要将世界坐标转化为屏幕坐标。

世界坐标 ----> 裁剪坐标

因为世界坐标通过乘观察矩阵得到观察坐标,观察坐标在乘裁剪矩阵得到裁剪坐标。而且观察矩阵和裁剪矩阵都会进行归一化,也就是我们可以找到观察矩阵和裁剪矩阵组成的组合矩阵,而且此4x4的组合矩阵会进行归一化(第一个元素为(-1,1))。

游戏安全-FPS游戏方框绘制基本原理
X = a11*x1 + a12*y1 + a13*z1 + a14Y = a21*x1 + a22*y1 + a23*z1 + a24Z = a31*x1 + a32*y1 + a33*z1 + a34W = a41*x1 + a42*y1 + a43*z1 + a44//(x, y, z)就是(x1,y1,z1)对应的裁剪坐标//注意w有可能小于0,如果w小于说明物体不在你的视角范围中(不需要在屏幕上显示)。

所以我们需要的就是通过组合矩阵的第一个元素a11为(-1,1)来搜索得到组合矩阵。

裁剪坐标 ----> NDC坐标

NDC坐标就是将裁剪坐标对应的xyz除以w,这就是透视分割算法(降维)。

NDC_X = X / WNDC_Y = Y / W

NDC坐标 ----> 屏幕坐标

这需要一个视口变换矩阵,视口变换矩阵左乘NDC坐标就会得到对应的屏幕坐标。其中视口变换矩阵中fs和ns一般为0。

游戏安全-FPS游戏方框绘制基本原理

最后得到屏幕坐标的X = (Ws / 2 * NDC.x) + (NDC.x + Ws / 2), Y = -(Hs / 2 * NDC.y) + (NDC.y + Hs / 2)。

而Ws * Hs为当前屏幕窗口的分辨率,且注意在windows中屏幕坐标系的规则

游戏安全-FPS游戏方框绘制基本原理

原文始发于微信公众号(零羊Web):游戏安全-FPS游戏方框绘制基本原理

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月2日23:05:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   游戏安全-FPS游戏方框绘制基本原理https://cn-sec.com/archives/3892237.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息