吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 20048|回复: 147
收起左侧

[游戏安全] 十分钟告诉你fps方框透视原理,画图详解,以csgo单机版为例。

    [复制链接]
pj66666666 发表于 2021-12-7 14:44
FPS类游戏方框透视的原理,就是根据敌人在游戏世界中的位置,算出其在屏幕上对应的位置,绘制的方式就不谈了,可以用D3D HOOK,也可以gdi绘制。
接下来,我讲一讲计算的原理,只要你上过初中学过数学,就一定能看的懂。
我们需要的数据有以下几个
1.自己的x,y,z坐标
2.敌人的x,y,z坐标
3.自己的鼠标角度
这些数据都可以用ce搜索到,不会的可以去看看ce的教程
image.png


我们先不算z轴 找x,y平面的对应关系,如图所示,这是一个上帝视角的图,也就是从天空中向下看,假设原点为我们自己,我们与敌人有一条连线,我们鼠标的方向有一条射线。
这些都是在游戏中可以找出的数据,这其中有一个很关键的角α,需要我们求出来。因为我们只要知道了α角,就可以通过鼠标与x轴的角度-α角求出β角。为什么要求β呢?
image.png

我们画两条辅助线
试想一下怎么才能找到敌人位置与屏幕的对应关系 ,没错,就是a边,
比如我们游戏的分辨率是1366*768,那横着的以我们准星为分界的一般就是683
比如我们屏幕就是一个分界线,屏幕是离我们最近的一个面,这个面上的长度是683,那a的长度对应到屏幕上是多少 ,肯定是和b的长度成反比的,
b的长度越长,这个距离肯定也就越短,所以我们得到 屏幕上对应的敌人位置应该是 683+a/b*683(敌人在我们鼠标射线的右边),反之就是减去,y轴也是同理的。
image.png

现在可能我不说很多人也会了, 我们的x坐标减去敌人的x坐标得到x边,我们的y坐标减去敌人的y坐标得到y边,利用勾股定理,求得c边。
可知a=sinβ*c    b=cosβ*c,如果敌人在我们的左边也是同理,只不过β会变成负的,这样导致sinβ变成了负数,但是cosβ还是正的 ,也就是说a/b变成了负数,那岂不是正好,加了负数就等于减去了它,敌人在我们屏幕上对应的位置也就到了左边。
当然事情还没这么简单,这只是其中两种情况,
image.png

如果是这样呢,α角-鼠标角度已经大于180°了 ,这时候 我们用360-α+鼠标与x轴角度就可以了。
image.png
反之同理 如果鼠标与x轴角度-α角大于180°,那就用360-鼠标与x轴角度+α就可以了。

忘记说了求α的角度问题,这个根据x,与y来判断,我相信你们也都会求,我将我的源码放在下面 ,只解释一部分,其他的都是同理


image.png
还是以原点为例,当我们的x-敌人的x小于0,y相等的时候, 就是这种情况 ,这个时候我们与敌人的连线与x轴的夹角(α)是为0的,其他三种同理,不理解的可以自己画图看一下


                       if (x < 0 && y == 0)
                        {
                                xAngle = 0;

                        }
                        else if (x == 0 && y < 0)
                        {
                                xAngle = 90;
                        }

                        else if (x > 0 && y == 0)
                        {
                                xAngle = 180;
                        }

                        else if (x == 0 && y > 0)
                        {
                                xAngle = 270;
                        }

       image.png
这种情况,我们的x,y都小于敌人,我们用反正切直接算出角度(不懂反正切的可以去百度),我简单的说一下 ,就是知道两条直角边用来求角的,这里得出的是弧度制,转为角度制,所以/pi*180(/pi表示占了pi的几分之几,再成180转为对应的角度)。
                        else if (x < 0 && y < 0)
                        {
                                xAngle = atan2(abs(y), abs(x)) * 180 / M_PI;
                        }
                       

                        else if (x > 0 && y < 0)
                        {
                                xAngle = 90 + atan2(abs(x), abs(y)) * 180 / M_PI;
                        }
                       
                        else if (x > 0 && y > 0)
                        {
                                xAngle = 180 + atan2(abs(y), abs(x)) * 180 / M_PI;
                        }
                       
                        else if (x < 0 && y > 0)
                        {
                                xAngle = 270 + atan2(abs(x), abs(y)) * 180 / M_PI;
                        }
以上的步骤再平面我们的方框就能对应上敌人了 但是游戏是三维世界 ,还需要z轴也对应上,毕竟游戏地图会使我们和敌人有高度差。

image.png
image.png

如图所示,还是以原点为例,但是现在我们相当于站在侧面看了,而不是在天空看,所以此时x轴就是我们刚才求的c边了,这需要一点空间想象能力 ,我画图能力有限,画不出立体的图片。
这时候 我们用我们鼠标的y角度,也就相当于对于整个屏幕的角度(这个角度就是你鼠标在游戏中上下就会变的角度,在我测试的csgo中,上是负数,下是整数,上为0-(-90),下为0-90)
来求h边,在用h边减去x就得到了敌人离我们鼠标准星的距离,还是老规矩,转到屏幕上,
举一反三一下 ,应该就是 384-(h-z)/c*384。  h=tan(θ)*c,当然这要分敌人在我们上面和下面两种情况讨论, 我就不细讲了,只要你符号搞对了都没问题,方法有很多种。

image.png

虽然还有些不准确但是可以设置一些比例进行微调,如果要继续优化,还需要找出是队友还是敌人的标记,还有是否死亡的标记,我这里只讲关键原理 ,就不谈了。
image.png

利用ce找到的一些数据,也可以用敌人血量判断是否死亡。
相信看完我说的这些,原理你们应该都明白了,赶紧动自己手写一个吧!

image.png

免费评分

参与人数 58威望 +1 吾爱币 +75 热心值 +48 收起 理由
su823237 + 1 我很赞同!
junjia215 + 1 + 1 我很赞同!
SRYTNT + 1 + 1 我很赞同!
萌新与小白 + 1 + 1 热心回复!
baiping520 + 1 + 1 谢谢@Thanks!
抱歉、 + 1 用心讨论,共获提升!
mingan2001 + 1 用心讨论,共获提升!
FORS + 1 我很赞同!
呵呵注册 + 1 谢谢@Thanks!
llddww + 1 + 1 我很赞同!
彤哥来啦 + 1 + 1 我很赞同!
q105277951 + 1 + 1 用心讨论,共获提升!
她家的小帅哥 + 1 到了这个帖子突然发现我竟然没上过初中没学过数学。难过
mixsen + 1 + 1 我很赞同!
li512hou122 + 1 + 1 我很赞同!
快乐老迈 + 1 + 1 纽约比
dragonxash + 1 + 1 谢谢@Thanks!
lemonL + 1 我很赞同!
bitconverter + 1 + 1 用心讨论,共获提升!
1354769531 + 1 我很赞同!
牛逼Plus + 1 + 1 牛啊牛啊,属实是太牛了!
fengchuan + 1 谢谢@Thanks!
奶味小可爱 + 1 + 1 我很赞同!
123jqjq + 1 + 1 谢谢@Thanks!
SouperGeng + 1 + 1 谢谢@Thanks!
yangsenhappy + 1 + 1
Serendipity027 + 1 用心讨论,共获提升!
Mr杨坤 + 1 硬核教学,很奈斯
Voccoo + 1 + 1 用心讨论,共获提升!
伟大的小明 + 1 + 1 我很赞同!
tangyuan852 + 1 我很赞同!
Vardven + 1 + 1 热心回复!
gunxsword + 1 + 1 谢谢@Thanks!
yuriki2009 + 1 + 1 谢谢@Thanks!
就是那个秋 + 1 + 1 淦,他是真想让我们弄明白
idlerr + 1 + 1 热心回复!
qwe134133987 + 1 + 1 热心回复!
shaoran + 2 + 1 完了,我弄明白了 可咋整
小母牛倒立 + 1 + 1 淦,他是真想让我们弄明白
圆周率丶 + 1 + 1 我很赞同!
Joe1921567817 + 1 mspaint作图 太硬核了!
鸭鸭鸭? + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lusikepojie + 1 纯交流技术
Tayswinostal + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
xiaoweng + 1 + 1 谢谢@Thanks!
春花秋月先开花 + 1 谢谢@Thanks!
howsk + 2 + 1 用心讨论,共获提升!
growing88 + 1 + 1 热心回复!
wudakai1218 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
材鸟 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Juch + 1 + 1 我很赞同!
xyl52p + 1 谢谢@Thanks!
我是靓仔 + 1 + 1 谢谢@Thanks!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
MartinLee + 1 + 1 未来之星
fanyinya + 1 + 1 我很赞同!
神枪泡泡丶 + 2 + 1 用心讨论,共获提升!
alex-1995 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Sen 发表于 2021-12-7 17:47
        未来之星,   实在是佩服

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
yongkui.shi + 1 + 1 我很赞同!
Peisen + 1 + 1 我很赞同!

查看全部评分

头像被屏蔽
longskr 发表于 2021-12-8 12:51
jsnthf 发表于 2021-12-7 15:36
wt1823 发表于 2021-12-7 15:51
哇厉害,懂了
hmk101931 发表于 2021-12-7 15:52
我只好奇穿越火线能用不?
 楼主| pj66666666 发表于 2021-12-7 15:56
hmk101931 发表于 2021-12-7 15:52
我只好奇穿越火线能用不?

可能坐标机制不一样,而且会有保护,原理都是一样的
摇裤儿 发表于 2021-12-7 16:17
这也太强了
2020try 发表于 2021-12-7 16:19
楼主虽然今天刚注册,但功底深厚啊
x88tv 发表于 2021-12-7 16:33
谢谢分享
imnotmc 发表于 2021-12-7 16:41
反作弊系统针对的都是这?
又红又专 发表于 2021-12-7 16:42
不如矩阵来的快而且偏差小
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-21 23:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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