FPS游戏通用准星修正实现自瞄
FPS游戏内的十字瞄准视角其实就是一个视角摄像机这个应该不难理解吧,如何调整摄像机的视角就要用到一个叫“姿态角(Euler角)”的数据,即: yaw , pitch , roll。这3个值的解释如下:
pitch是围绕X轴旋转,也叫做俯仰角
yaw是围绕Y轴旋转,也叫偏航角
roll是围绕Z轴旋转,也叫翻滚角
用张图来解释比较直观:
首先我们要先知道自己的Euler角值,然后就要知道目标的坐标,最后通过公式计算出需要修正的Euler角值。
下面直接给出封装好的运算函数:
#define M_PI 3.14159265358979323846
#define M_PI_F ((float)(M_PI))
#define DEF_AIMBOT_FOV 15.0f
#define DEG2RAD(x) ( (float)(x) * (float)(M_PI_F / 180.f) )
#define RAD2DEG(x) ( (float)(x) * (float)(180.f / M_PI_F) )#pragma pack(push)
#pragma pack(1)typedef struct tag_Rotator{float Pitch; float Yaw; float Roll;
}TROTATOR, *PROTATOR;typedef struct tag_Vector3 {float x;float y;float z;
}TVECTOR3,*PVECTOR3;#pragma pack(pop)TROTATOR Vec2Rot(PVECTOR3 vec)
{TROTATOR rot;rot.Yaw = RAD2DEG(std::atan2f(vec->y, vec->x));rot.Pitch = RAD2DEG(std::atan2f(vec->z, std::sqrtf(vec->x * vec->x + vec->y * vec->y)));rot.Roll = 0.f;return rot;
}TROTATOR Clamp(TROTATOR r){if (r.Yaw > 180.f)r.Yaw -= 360.f;else if (r.Yaw < -180.f)r.Yaw += 360.f;if (r.Pitch > 180.f)r.Pitch -= 360.f;else if (r.Pitch < -180.f)r.Pitch += 360.f;if (r.Pitch < -89.f)r.Pitch = -89.f;else if (r.Pitch > 89.f)r.Pitch = 89.f;r.Roll = 0.f;return r;
}//参数 目标坐标,自己的坐标,自己视角
TROTATOR CalcAimToTarget(PVECTOR3 pTarPos, PVECTOR3 pLocPos, PROTATOR pLocRot){TVECTOR3 delta = { 0 };delta.x = pTarPos->x - pLocPos->x;delta.y = pTarPos->y - pLocPos->y;delta.z = pTarPos->z - pLocPos->z;TROTATOR ideal = Clamp(Vec2Rot(&delta));ideal.Pitch = ideal.Pitch - pLocRot->Pitch;ideal.Roll = ideal.Roll - pLocRot->Roll;ideal.Yaw = ideal.Yaw - pLocRot->Yaw;//计算出目标所需要的视角范围FLOAT angFOV = sqrt(angDelta.Pitch * angDelta.Pitch + angDelta.Roll * angDelta.Roll + angDelta.Yaw * angDelta.Yaw);//游戏中大部分玩家的FOV都是80~90这个值可用于判断视野范围内/*if (angFOV < DEF_AIMBOT_FOV){OOXX}*///修正值return Clamp(ideal);
}
最后将计算结果加上自己的 Euler角值即可将准星修正到你需要的位置。
PS. 一般套路FPS模型都会有个人物骨骼列表,里面包含了模型所有关键部位的坐标。
FPS游戏通用准星修正实现自瞄相关推荐
- FPS游戏通用自瞄与透视算法详解!!
自瞄算法与实现: 1:首先我们要找到一个敌人的三维坐标. 2:我们还要找到自己的三维坐标. 3:我们还要找到自己的鼠标坐标X与Y(这里的鼠标坐标X与Y是角度,X为360,Y正中间为0向上减少到负90度 ...
- fps游戏通用内存自瞄算法的原理与C++实现
目录 算法原理 获取敌人离屏幕中心的距离 取得离屏幕最近的敌人距离 C++实现自瞄
- FPS游戏自动瞄准敌人头部?是如何实现的(三)准星算法与实现自动瞄准
准星算法 知道了准星的变化规律: 1.准星水平位置摇摆角 正北是π,逆时针逐渐减小,正南是0,继续逆时针减小到正北为-π π和-π重叠 (正北方向Y轴逐渐增加,正东方向X轴逐渐增加) 2.准星高度位置 ...
- 任鸟飞在线课程之FPS游戏自瞄爆头飞天透视画框
0.FPS游戏自瞄展示 1.FPS游戏自瞄透视之模块动态加载 2.FPS游戏自瞄透视之玩转堆栈 3.FPS游戏自瞄透视之遍历周围所有目标 4.FPS游戏自瞄透视之目标需要的属性总结 5.FPS游戏自瞄 ...
- FPS 游戏自瞄原理
了解FPS游戏自瞄漏洞 经常玩游戏的朋友,应该知道FPS游戏,例如:穿越火线,逆战等等,他们的特点就是以第一人称视角进行操作人物,屏幕中间会有一个准星,通过准星瞄准敌人进行攻击以达到击杀效果和游戏体验 ...
- FPS游戏自瞄爆头原理
众所周知只要是射击类FPS类游戏都有自瞄爆头的功能有的人会说,既然大家都知道,游戏公司也必然知道那么为什么不把这个BUG修复掉呢实际上并不是不修复,而是这个根本不算是BUG 为什么这么说呢?原因很简单 ...
- 基于yolov5实现FPS游戏自瞄,理论上通杀所有射击游戏
1.参考大佬细致教学:Python Apex YOLO V5 6.2 目标检测 全过程记录_mrathena的博客-CSDN博客 [Yolov5]使用Ai实现FPS游戏自动瞄准 yolov5fps自瞄 ...
- 【flash】FPS游戏枪的后坐力制作 准星的抖动
游戏里的准星抖动 大体思路是这样子的.所谓的手感 也不过是 函数产生的 偏移大小而已. 代码下载在最下面 效果 不压枪 是一个7字 压枪 哎算了 好久就没打fps 压了个寂寞 废话不说 上代码 先分析 ...
- 【游戏逆向】FPS游戏自瞄透视之堆栈分析
我们想做FPS游戏的自瞄透视功能,最基础的数据就是周围所有目标的坐标值只有确定了所有目标的位置,我们才能用算法写出自瞄和透视. 首先我们拿自身的血量当突破口,找出周围所有目标的遍历. 竞技场血量不好找 ...
最新文章
- SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos
- 每天一个linux命令(8):cp 命令
- layui如何获取父节点的父节点_jquery获取父元素或父节点的方法
- c#扩展方法奇思妙用高级篇七:“树”通用遍历器
- Linux /dev目录详解和Linux系统各个目录的作用
- 随机化算法-----模拟退火
- mysql添加普通用户用于管理单一数据库
- AUTOSAR从入门到精通100讲(四十八)-Lin通信协议栈分析两步走-LinTrcvLIN Driver
- pandas 读表格_pandas电子表格的读取(pandas中的read_excel)
- Android播放器之SurfaceView与GLSurfaceView
- cogs——2416. [HZOI 2016]公路修建
- 摸鱼必备游戏(上班族专用斗地主)
- Flash倒计时+写在自定义类+写在关键帧
- tbopen链接生成工具_愚人节必备工具,有了它们就是朋友圈最靓的仔
- c++中引用、指针、值的区别与用途详解
- codewars Kata——Persistent Bugger问题
- S重构重命名的快捷键
- 关于DCDC选型OVP的经验
- Java基础--object类详解
- 继电保护原理1.2-反时限过流保护