会思考的树 发表于 2019-5-24 21:02:06

CSGO自瞄原理图文讲解


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

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


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



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


而敌人的坐标就是我们求出来的向量了
给大家简单介绍一个关于三维的概念:
· 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
大家可能以为到这儿就结束了,其实不然,还有另外一种情况,我们继续往下看


如果最初我们是以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));
      }
}

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

takahaxi 发表于 2019-5-30 14:32:08

激动人心,无法言表,感谢楼主,感谢看流星社区的分享!

请叫我文哥 发表于 2019-6-1 16:55:26

激动人心,无法言表,感谢楼主,感谢看流星社区的分享!

hahayzl 发表于 2019-6-2 15:05:35

看到这么好的资源真是高兴,楼主辛苦了!

bingan913 发表于 2020-2-22 20:16:57

https://www.yxkfw.com/data/attachment/forum/202002/21/112822xk1d06866xlxp13i.png

https://www.yxkfw.com/data/attachment/forum/202002/21/112827cv9dh1dwhz186u1z.png

{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 ac 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万字。
页: [1]
查看完整版本: CSGO自瞄原理图文讲解