看流星社区

 找回密码
 注册账号
查看: 15433|回复: 4

CSGO自瞄原理图文讲解

[复制链接]

该用户从未签到

发表于 2019-5-24 21:02:06 | 显示全部楼层 |阅读模式

说到FPS游戏的自瞄,大家都会想到读玩家的坐标,然后将坐标转化为屏幕坐标,再移动鼠标,其实这个有很大的缺陷,而且过程也比较麻烦,分辨率一换又要出问题
还有一种自瞄方法,现在CSGO大多数自瞄都是这样一个原理,获得敌人和自己的坐标,通过坐标来计算角度,通过写角度来实现自瞄
目前通用的计算角度函数是这样的

void CalcAngle( float *src, float *dst, float *angles )
{
    double delta[3] = { (src[0]-dst[0]), (src[1]-dst[1]), (src[2]-dst[2]) };
    double hyp = sqrt(delta[0]*delta[0] + delta[1]*delta[1]);
    angles[0] = (float) (asinf(delta[2]/hyp) * (180/3.1415926));
    angles[1] = (float) (atanf(delta[1]/delta[0]) * (180/3.1415926));
    angles[2] = 0.0f;
    if(delta[0] >= 0.0) { angles[1] += 180.0f; }
}


不过我今天要讲的是另一种算法,但是也相差不多
1.png

  
图上是两个玩家在三维上的位置,分别是A(-4,-2,1),B(4,2,1)
如果B是我们自己,而A是敌人,我们可以通过计算向量BA来得到两个玩家之间的距离,向量BA=A-B=(8,4,1),计算出向量BA后我们可以把我们自己也就是B当成原点坐标重新建立一个三维坐标系,如下图:
22.png

而敌人的坐标就是我们求出来的向量了
给大家简单介绍一个关于三维的概念:
· pitch是围绕X轴旋转,也叫做俯仰角
· yaw是围绕Y轴旋转,也叫做偏航角
以人物角色看,yaw是左右偏动,而picth是上下偏动,,在游戏中角度都是固定的一个方向,偏航和我们学习的二维坐标一样的,0°,90°,180°,270°,,而俯仰正Z轴是-90°,负Z轴是90°,俯仰可能和我们平时认知有点不一样,,不过不重要,我们继续
红色和X轴夹角我们称之为yaw,可以通过arctan(y/x)来计算出,而图中 yaw = arctan(4/8) ≈ 26°
蓝色和红色夹角我们称之为pitch,可以通过arcsin(z/红色),而 红色 = sqrt(x2 + y2) 所以 pitch = srcsin(2/(sqrt(82+42))) ≈ 6.37°
刚刚说过Z轴正半轴是-90°,而我们算出来是6.37°,很明显,如果俯仰以6.37°来写,那么我们的视角会朝下移动,所以我们要给俯仰度数取反 pitch = arcsin(z/红色) * -1
大家可能以为到这儿就结束了,其实不然,还有另外一种情况,我们继续往下看
3.png
  
如果最初我们是以A为我们玩家本身,B是敌人,那么我们要求的向量就是向量AB了,而向量AB = B - A = (-8,-4,1)
这样我们就可以以A为原点,敌人B的位置就是向量AB取成点的坐标,同样的道理我们计算出  红线 和 X 轴负半轴的夹角为 -26°,刚刚说到偏航是X轴开始为0°,如果我们直接写入-36°,那么玩家视觉必定转向的是第四象限而不是第三象限,所以我们就需要在算法里面多加一条判断 (敌人-我) 的X是否小于等于0 ,如果满足 yaw = yaw + 180°

我们刚刚算的在第一象限的时候 X > 0 并未满足小于等于0 所以yaw是26° ,不需要加180°,写入角度26°也会转向26°位置
而第三象限的时候 X < 0 满足了小于等于0 所以 yaw = -26 °+ 180° = 154°,大家可以想象一下 154°是否为第三象限玩家所在位置度数


OK,现在大功告成,我们只需要获得自己头部位置和敌人头部位置,然后通过以上计算得出yaw和pitch,在通过写内存来达到自瞄头部,,我把简单过程写出来,具体函数我就不写了哈
角度计算函数:
vec3 aimbot::calcAngles(vec3 us,vec3 them)
{
        vec3 dists;
        dists =them - us;
        float hyp = dists.magnitude();
        vec3 result;
        result.x = (asinf(dists.z / hyp)*57.295779513082f) ;
        result.y = (atanf(dists.y / dists.x)*57.295779513082f);
        result.z = 0;
        if (dists.x <= 0)
        {
                result.y += 180;
        }
        result.x = -result.x;
        return result;
}

大家可能会问为什么会有*57.295779513082f,这个是 180/3.1415926得到的,因为C++里asinf和atanf得出的弧度值,需要*(180/PI) 来转化为度数

void aimbot()
{
        Player localPlayer = utils.getLocalPlayer();
        Player closetPlayer = aim.getCloset();
        closetPlayer.getInfo();
        if (getClassid(closetPlayer.base) != 35)
                return;
        vec3 v2;
        v2 = getBonePos(localPlayer.base);
        vec3 v1;
        v1 = getBonePos(closetPlayer.base);
        vec3 aimat = aim.calcAngles(v2, v1);
        int pViewAngle = vam.Read<int>(bEngine + clientState);
        vam.Write<float>((pViewAngle + ViewAngles), aimat.x);
        vam.Write<float>((pViewAngle + ViewAngles + 0x4), aimat.y);
}


aimat.x接受的是pitch,aimait.y接受的是yaw;其他的函数我就不发出来了哈,这里主要是介绍csgo自瞄中的数学,其他的大家可以自己去学习
if (getClassid(closetPlayer.base) != 35) 这句是判断玩家实体是否为玩家

vec3:
class vec3
{
public:
        float x;
        float y;
        float z;
        vec3() :x(0), y(0), z(0){}
        vec3(float x,float y,float z):x(x),y(y),z(z){}
        vec3 operator + (vec3 v)
        {
                vec3 vr;
                vr.x = this->x + v.x;
                vr.y = this->y + v.y;
                vr.z = this->z + v.z;
                return vr;
        }
        vec3 operator - (vec3 v)
        {
                vec3 vr;
                vr.x = this->x - v.x;
                vr.y = this->y - v.y;
                vr.z = this->z - v.z;
                return vr;
        }
        float magnitude()
        {
                return sqrt((x * x) + (y * y) + (z * z));
        }
}

大家有什么不理解的可以在下面发粗来我给你们解答-.-+,只限本教程的哈

该用户从未签到

发表于 2019-5-30 14:32:08 | 显示全部楼层
激动人心,无法言表,感谢楼主,感谢看流星社区的分享!

该用户从未签到

发表于 2019-6-1 16:55:26 | 显示全部楼层
激动人心,无法言表,感谢楼主,感谢看流星社区的分享!
  • TA的每日心情
    开心
    2022-10-31 21:34
  • 发表于 2019-6-2 15:05:35 | 显示全部楼层
    看到这么好的资源真是高兴,楼主辛苦了!

    该用户从未签到

    发表于 2020-2-22 20:16:57 | 显示全部楼层




    {2020年02月19日} 未来三个月之内,爆发全球历史最大金融海啸!{假摔}

    {2020卝年02月19曰} 未来三个月之内,bào发全球历卝史最大金融海啸!{假摔}


    作者: 吹哨人贰
    时间 :   2020卝年2月19曰  星期三   农历正月廿六雨水    dèng小卝平去世纪卝念曰
               上证综指 2⑨84.97点        恒指 27530.20点      道指 29232.19点

    本人 邮.箱 :
    126  用户名: mmdd2016     s i n a  c o m   用户名:  mmdd2016
    126  用户名: iii217               s i n a   c n    用户名:  iii217


    突然的,全球金融 雪 崩 溃 坝 、彻 底 崩 溃 ;
    没有什么,“谁也没想到”、“友邦惊诧”黑天鹅白天鹅哥斯拉撞冰山;
    一切都是,蓄谋已久的,精心策划 --- 惊天魔盗团。zéi喊捉zéi。

    1  未来三个月之内,即,2020卝年三月、四月、五月,将会突然bào发,
        人类最大金融海啸,全球股市、金融市场连续跌亭大崩卝盘。
        {大盘连续或稍稍间断30/40多个跌亭板 }
        太久的忍耐时机筹谋,财狼们终于要动手了;
        虎虎虎。亦喜亦忧。大吉大凶。
        静里忽然动干戈。
        缠中说禅13年之前预卝言的,2019毁miè性下跌。{稍有误差}
        已故“周期天王”周金涛的,“2018年到2019年是康波周期的万劫
        不复之年”。
        道琼斯,憋了11年的一泡shǐ,总算找到了,公共厕所。


    2  全球连续跌停大崩卝盘的见底点位:
        上证综指160点左右,见底{166④的十分之一}。
        以今天上正宗指2⑨84.97计算,大约“瞬间”跌去 18倍。
        也可能,上证综指95.79点,见底。
        最震撼的推卝倒重来,竟然只是,洗盘 !冲顶之前的洗盘 !!
        道琼斯,跌去45倍,6④0点见底 --- {6④40.О8点的十分之一};
        29232.19 --→ 6④0点 ;
        恒生指数跌至1000点见底。
        27530.20 ---→ 1000点   ;   
        仙股满天飞。

    12个跌停板之后,停顿、反弹,之后,还有12个跌停板;
    12个跌停板之后,停顿、反弹,之后,还有12个跌停板。

    谜底,让你吃惊的合不拢嘴。这就对了。
    我强调,我重申,股价跌去97% ,跌去97%,不是庄稼们 发 疯 了,
    而是,他们,早已筹谋的,既定共同战略布jú。
    不把散户完全吓的 屁 滚 niào liú,如何能达到,彻 底 洗 盘 的目的 ??
    跌去九成,就像1929,对老股卝民来说,已经xí以为常;中卝囯股市,
    曾经跌去90%的股票,比比皆是。
    跌去九成,已经,无fǎ充分刺卝激震撼、撕 裂 老股卝民、私募的神 经
    系 统 。

    五重斩,五福临门:
    5178 ÷ 2 ÷ 2 ÷ 2 ÷ 2 ÷ 2 = 162点
    为何,大盘160点左右见底??
    本人在:
    {2019年11月30曰}论证2020上半年全球大崩卝盘的见底点位
    {2019年5月19曰}论证2019下半年全球大崩卝盘的见底点位
    【2016年3月11曰】四论,全球塴盘的见底点位。
    【2015年9月26曰】三论,全球塴盘的见底点位。
    ……  ……
    几篇文章之中有模糊的猜测论证,网上可以搜到。

    2020卝年03月、04月、05月,忽然之间,天昏地暗,天崩地裂。
    朕给出,令庸俗大众惊诧疑惑、无fǎ接受的“庄稼底牌”,是无价之
    宝。
    真卝理是电,不以任何人,任何泉卝利、任何所谓“大多数”的,意志为
    转移。

    猝不及防,永远出乎散租意料,“万万没想到”,使之“猜不透”、团
    团转、热锅蚂蚁;驱赶围猎,永远使散户沉浸于tān婪恐惧烈火寒冰,追
    涨shā跌动物本能”无fǎ自拔;
    是庄稼们百战百胜吃香喝辣的,看家fǎ宝。

    见底点位{上证宗指160点或者95.79点},是全球庄稼们{xié.饿.金融精英}
    蓄谋已久的共识,不以任何人意志为转移。
    即,在见底之前,出抬任何“救卝市利好”都是徒劳无益瞎折腾。
    当见底之时,即便不出抬任何救卝市措施,股市也会自动“大反转”腾空
    而起。

    中外庄稼qīn蜜配合,完成最后的惨烈洗盘。
    而直接zá盘、直接做空,导致中卝囯股市xuè崩的,是中卝囯庄稼 ---- 中卝囯
    财富精英之中的精英 --- 资本大鳄。
    每一只股票背后,都有庄稼暗中cāo纵走势。
    每一个囯卝家的股票市场,金融市场,都有庄稼总司令暗中主导一切。
    黑老大、总指挥,是 黯 黑 帝 囯。

    索罗斯的,类兽卝性、反射理论,动态远均衡,大起大落理论。
    缠中说禅的,跌停板洗盘fǎ。


    3  见底时间:2020卝年六卝月至2020卝年八月全球股市同步见底。
       
    ---- 见底以上证综指160{95.79}}点为准 ,见底时间仅为cū略推断。
    ---- 好深一个坑;假摔,象 真 的 一 样 。
    ---- 来去匆匆,夏曰的大bào雨 ;
           两个月、至多三、四个月之内,完成最后的 溃 坝 式 终极洗盘。
    ---- 最疯狂的连续跌停,然后,迅速连续涨停,拉起。荡秋千。
           庄家绝不敢在底部卝长期停留,因为股价太便宜,远低于,庄家
           的长期平均持仓成本。

    连序跌亭洗盘过程之中,会有反弹诱多,会有横盘迷卝魂阵,会有底部
    构筑 W底的把戏 。
    并没有什么,情绪彻底崩溃,破罐破摔,歇斯底里不顾一切 ……
    ---- 演戏给你看!
           一切都在,沉着冷静,聪明透顶庄稼们的,精确掌控之中。

    本人对见底点位、见底时间的推演预卝测,可能不那么准确。这也,不
    是什么大问题。
    最关键,全球崩卝盘的“性质”,是“挖坑”行情,是黎明之前最后最
    黑卝暗最凶狠的一shā。这一点,本人绝对不会错,这就够了,足够了。
    但愿本剂疫卝苗,不会失效。
    底部巨量,惊天的底部巨量,历卝史最高成交量,全民目击的狐狸尾巴,
    谁也无fǎ否认。
    这就是,庄稼xī筹洗盘,mǎi入股票的,铁证。

    疑似吹鼓手,2018年О8月16曰海通证券分析师荀玉根表示,A股正处
    于第五轮牛熊周期的底部。前四次除20О8年那次外,其余三次1994年
    7月-1996年1月、2002年1月-2005年6卝月、2012年1月-2014年6卝月都
    是以时间换空间的震荡圆弧底。(中卝囯证券报)
    “磨底是长期的、复杂的过程,期间不排除还会出现巨震。”

    为什么,一定是“以时间换空间的震荡圆弧底”;
    而不可能是,“以空间换时间的金zhēn探底”??

    可能的未来是,当上证综指连续跌停跌破贰佰点,跌破壹佰点之时,
    病急乱投医,guān卝员们按约定祭出四个救卝市最大shā器 :
    ----  取消T+1,取消10%涨跌幅限卝制,万亿借款央行直接入市,
            推出88万亿经济刺卝激印钞票计划。
    中卝囯股市,次曰,一天bào卝涨30倍,把所有散户都闪了腰。
    中卝囯百卝姓,早应学会“听反话”。它吹东,那么表明东方有máo坑;
    西边才是正确的选择与方向。

    4   2020卝年三月、四月、五月全球崩卝盘断头铡dāo的利空借口:
         持续上涨91年{从1929算起},终极冲顶之前必然的总洗盘,
         持续上涨91年{从1929算起},终极冲顶之前必然的总洗盘,
         不以任何人,任何事卝件为转移。
    不管,有没有,中美贸易战、全球贸易战,{朝}核危卝机、特朗普 金 正 恩
    疯狂折腾、美囯加息 、或者降息预期落空、中卝囯加息、恐怖xí卝击、斩首
    遇刺、中卝囯经济下行,债务危卝机、公卝投危卝机、拖欧危卝机、减持危卝机、汇率
    危卝机、石油危卝机、钱荒危卝机、质押股票平仓、配资bào仓、liú姓投资人出事
    了、科创板注册制、囯债收益率、下调评级、程序化自动交易、软件自动
    斩仓、新股IPO抽xuè、索罗斯做空、巴以危卝机、土耳其叙利亚伊朗阿卝拉卝伯
    危卝机、关门危卝机、废除中岛条约、第二个“广卝场协议”、担忧全球经济放
    缓、文明冲卝突赵薇gē韭菜、地卝震海啸火山烹卝发冠状病dú疫情等自卝然卝灾卝害、
    最怕不确定 ……
    一座或N座城市,遭受一次或N次的,原子弹恐怖xí卝击 ---- 本质还是自己
    zhà自己,演戏。资本来到世间,从头到脚,每个máo孔都滴着xuè和肮卝脏的东
    西。
    狼吃小羊,与溪水无关,与 武 汉 肺 炎 病dú 是不是 生 物 武卝器无关。
    庄家们刻意制卝造。蓄谋已久。zéi喊捉zéi。闪击战。
    又一次,剪羊máo,开始了。躲不过的。

    所谓“股汇双shā”其实并不存在,或者,那只是一个借口。
    看看人卝民币汇率长期走势图,与中卝囯股市涨跌并无正相关。况且,本币
    贬值,股市上涨,才是正常现象。例如,委内瑞拉的万倍通胀,股市上
    涨74倍。
    汇市,或者其它乱七八糟,都是 烟 雾 弹 ,股市,才是主战场。


    5  有关2019年底bào发人类最大金融海啸的,事先预卝测文章:

    {1}《2019年底bào发世界经济危卝机的可能性分析(万字长文)》
             ---- 知乎;星象大白;2019年8月28曰前后成文
                   专题分析,一共分为4篇,长达3万字。
    点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
    您需要登录后才可以回帖 登录 | 注册账号

    本版积分规则

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

    GMT+8, 2024-4-25 05:15

    Powered by Kanliuxing X3.4

    © 2010-2019 kanliuxing.com

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