FPS游戏:方框透视算法分析
在前面的教程中我们已经手动找到了【FOV视场角】【本人坐标数据】【本人鼠标角度】【敌人坐标数据】【玩家数量】【玩家是否死亡】【敌人之间的数组偏移】这些基址数据,多数情况下类FPS游戏找坐标手法都大同小异,接下来我们将具体分析计算方框的思路,以及实现这些方框绘制算法。
第一象限求角: 假设敌人在第一象限,求鼠标指向与敌人之间的夹角b,可以使用反正切求导。
我们知道自己与敌人的相对(X,Y)距离,可以使用反正切公式求出a角的度数。而我们最终的目的是要求出我们的鼠标指向与敌人之间的夹角b,此时我们可以通过已知的鼠标角度C减去a既可得到b的角度。
第二象限求角: 假设敌人在第二象限,而我们的鼠标依然指向在第一象限,求敌人与X轴之间的夹角度数。
如上图:由于(X,Y)(黑色)是已知条件,我们可以通过X比Y求反正切,即可得到a角的度数,然后与90度相加,即可求出敌人当前坐标位置与X轴之间的夹角度数。
第三四象限: 敌人在第三与第四象限与上图差不多,最终目的就是求敌人的位置与X轴之间的夹角,第三象限应该加180度,第四象限加上270度数。这里就不罗嗦了,很简单的东西。
另外4种特殊情况: 如果敌人在第一象限且与X轴重合,那么敌人与X轴为之间的夹角度数必然为零度,同理如果与Y轴重合的话,那么X轴与敌人之间的夹角度数为90度,以此类推就是这四种特殊情况。
上方的4条象限与特殊情况,如果展开的话一共是8种不同的情况,如下代码就是这八种不同情况,调试下面的这段代码会发现一个缺陷,那就是当我们绕着敌人转圈时,偶尔会出现一个大于180度的角度,这又是两种非常特殊的情况。
特殊情况: 当敌人在第四象限且鼠标角度依然在指向第一象限的情况下,则会出现大于180度的角。
如上图:我们的目标是求鼠标角度与敌人之间的夹角度数,而此时的鼠标指向第一象限,而敌人却在第四象限上,我们用360度减去e角度(e = 敌人坐标与x轴之间的夹角度数),即可得到K角度,用K角度加上M角度,即可得到鼠标与敌人之间的夹角度数,另一种特殊情况敌人与鼠标角度调换位置求角,最终代码如下:
FOV视场角度: 摄像机的作用就是,移动游戏中的场景,并将其投影到二维平面,显示给玩家。
如上图:摄像机与屏幕之间的夹角统称为视场角,游戏中的准星位置到屏幕的边缘是FOV的一半,以屏幕分辨率1024x768为例,当FOV为90度时,则准心与屏幕的垂线构成45度等腰直角三角形,此时的摄像机到屏幕的距离就是一半屏幕长度(1024/2 = 512)的大小。
三维横坐标转屏幕X坐标: 将三维矩阵中的敌人坐标数据,转换为屏幕的X坐标。
如上图:我们需要求出敌人位置的坐标数据,可以使用 (x/y) x (1024/2)
最后还需要加上P的长度,由于窗口的总长度是1024那么我们可以直接除以2得到另一半的长度(512),将敌人位置与另一半长度相加就是敌人投射在屏幕上的X坐标,但是此时我们并不知道(X,Y)的长度,所以需要先求出(X,Y) 如下图所示。
上图中:我们需要求出(X,Y)的距离,此时我们已经知道了M和C的长度,则此时我们可以直接使用勾股定理M的平方 + C的平方 (开方)= Z
,得到Z之后,通过 sin a = (x/z) => sin a * z = X
此时我们已经得到的X的长度,接着 cos a =(y/z) => cos a * z = Y
此时我们也得到了Y的长度,最后 (x/y) x 512 + 512
即可得到敌人位置,投射到屏幕上的X坐标。
三维纵坐标转屏幕Y坐标: 三维横坐标搞懂了,这个纵坐标就更简单了,如下图:
上图中:通过tan公式即可推导出d与c的距离,然后将d与c的长度相加,即可得到鼠标指向与敌人位置之间的距离,然后再加上屏幕高度的一半,本游戏屏幕高度为768,所以要加上384即可。
最终屏幕横坐标与纵坐标的转换算法如下所示,最后一点代码不搞了!要搬砖去了!
最后的透视效果如下,此处游戏屏幕必须为1024x768,三维坐标转屏幕坐标算法中已经写死了,其他屏幕尺寸需要自行调整代码中的比值关系与相应数值。
FPS游戏:方框透视算法分析相关推荐
- c语言游戏call调用,C语言-植物大战僵尸-刷僵尸call;fps游戏CS-方框透视(矩阵+传统)...
C语言-植物大战僵尸-刷僵尸call:fps游戏CS-方框透视(矩阵+传统)前言:大家好,我是向上先生,嘿嘿~最近在学习逆向.反汇编等等,首先我在非常感谢52pojie这个平台,差不多很多学习资源都是 ...
- 任鸟飞在线课程之FPS游戏自瞄爆头飞天透视画框
0.FPS游戏自瞄展示 1.FPS游戏自瞄透视之模块动态加载 2.FPS游戏自瞄透视之玩转堆栈 3.FPS游戏自瞄透视之遍历周围所有目标 4.FPS游戏自瞄透视之目标需要的属性总结 5.FPS游戏自瞄 ...
- FPS 游戏实现D3D透视
FPS游戏可以说一直都比较热门,典型的代表有反恐精英,穿越火线,绝地求生等,基本上只要是FPS游戏都会有透视挂的存在,而透视挂还分为很多种类型,常见的有D3D透视,方框透视,还有一些比较高端的显卡透视 ...
- FPS游戏:实现D3D劫持透视 (API Hook)
FPS游戏可以说一直都比较热门,典型的代表有反恐精英,穿越火线,绝地求生等,基本上只要是FPS游戏都会有透视挂的存在,而透视挂还分为很多种类型,常见的有D3D透视,方框透视,还有一些比较高端的显卡透视 ...
- 【游戏逆向】FPS游戏自瞄透视之堆栈分析
我们想做FPS游戏的自瞄透视功能,最基础的数据就是周围所有目标的坐标值只有确定了所有目标的位置,我们才能用算法写出自瞄和透视. 首先我们拿自身的血量当突破口,找出周围所有目标的遍历. 竞技场血量不好找 ...
- C/C++FPS实战CSGO矩阵方框透视骨骼自瞄实战教程
C/C++FPS实战CSGO矩阵方框透视骨骼自瞄实战教程
- FPS游戏透视源码!
FPS游戏透视源码! 2011年10月03日 需要的自己拿 ,部分插件需要自己给路径!~你懂的 C语言编译环境哈!#include #include #pragma comment(lib, &quo ...
- FPS游戏:D3D内部游戏菜单实现
19年发布了一篇<FPS游戏:实现GDI方框透视>这篇文章,本篇文章中使用到的技术是外部GDI绘制,该绘制模式在Win10系统中如果不关闭毛玻璃效果则绘制会失效,为了解决绘制失效的窘境,故 ...
- FPS游戏:D3D实现游戏人物上色
本教程是<FPS游戏:实现D3D劫持透视 (API Hook)>教程的延续篇,在上一课我们讲解了如何通过函数劫持,实现对特定角色墙后透视功能,不过我们当时使用的是全局透视,并没有找到人物模 ...
- 深度解析FPS游戏外挂+解决方案
1974年,由Steve Colley开发的世界上第一款FPS游戏<迷宫战争>诞生,这款看似简单的游戏却为未来近半个世纪的FPS类游戏的蓬勃发展埋下了一颗种子. 据今年2月STEAM热门 ...
最新文章
- 【cocos2d-x】Lua中的table函数库
- linux mysql互为主从_mysql互为主从配置(双主模型)
- 每日一皮:修Bug的真实情况...
- 成功解决极其刁钻bug之TypeError: ‘<=‘ not supported between instances of ‘list‘ and ‘int‘
- python配置核_浅谈pytorch卷积核大小的设置对全连接神经元的影响
- 放置奇兵 算法 月度活动 破碎时空记录 第五关 丁丁(瓦伦丁)+杰赫拉
- 笔记-项目范围管理-复习要点
- iptables 添加,删除,查看,修改
- Hybris的extension和ABAP的package
- vscode如何使用命令面板
- systemd.generator — systemd unit generators
- 使用单链表数据结构存储结构化的学生信息
- 有一些四位数,百位数字都是3,十位数字都是6,并且它们既能被2整除,又能被3整除,求这样的四位数中最大的和最小的两数各是几?
- 【python文本分析】——基于股评文本的情绪分析
- 拼多多API接口:item_search - 根据关键词取商品列表
- linux远程连接命令
- Excel文档中字符型数据转化为数字类型
- 唐诗欣赏静夜思用html设计,静夜思-古诗翻译译文赏析-李白诗歌网
- python同一个包下不同文件的函数调用
- S@Kura的PHP进阶之路(二)
热门文章
- matplotlib图表涉及中乱码问题
- 安信可IDE 1.5编译ESP8266 RTOS 3.0
- A类业余电台操作证书考试内容提要
- 关于BASE编码 16 32 36 58 64 58 91
- 英文单词和数字断行不折叠
- 阿里电话面试被虐经历
- 计算机应用程序设计师,2018年上半年软件设计师真题+答案解析上午选择+下午案例完整版(全国计算机软考).pdf...
- 《C》C语言实现FFT算法
- 用mapgis数据转成arcgis中shape格式的方法
- BiliBili下载助手