FPS游戏方框透视基本原理
计算机图形学基础
计算机图形学最基础的目标就是把建模时构建好的3D物体显示在2D屏幕上,这就涉及到物体在不同坐标系中坐标的转换。(物体/建模坐标系 ---------> 屏幕坐标系)
坐标系
在游戏中涉及到各种坐标空间和对应的坐标系
游戏中通过建模完成的3D物体要想在2D屏幕上显示出来需要进行坐标的转换。
矩阵变换
物体在一个三维坐标系中要想变换到另一个三维坐标系中需要通过矩阵乘法(与一个特殊的矩阵相乘),得到在另一个三维坐标系中的坐标。三维空间中某点的变换可以表示成点的齐次坐标与四阶的三维变换矩阵相乘 。
D3D和OpenGL的矩阵存储
D3D中会将对应的线代矩阵利用数组按行存储(行主顺),OpenGL中会按列存储(列主序)。
FPS游戏逆向思路
我们利用CE附加游戏后我们可以找到人物在世界坐标中的世界坐标(x1,y1,z1),要想在屏幕上画出人物边框就需要将世界坐标转化为屏幕坐标。
世界坐标 ----> 裁剪坐标
因为世界坐标通过乘观察矩阵得到观察坐标,观察坐标在乘裁剪矩阵得到裁剪坐标。而且观察矩阵和裁剪矩阵都会进行归一化,也就是我们可以找到观察矩阵和裁剪矩阵组成的组合矩阵,而且此4x4的组合矩阵会进行归一化(第一个元素为(-1,1))。
X = a11*x1 + a12*y1 + a13*z1 + a14
Y = a21*x1 + a22*y1 + a23*z1 + a24
Z = a31*x1 + a32*y1 + a33*z1 + a34
W = a41*x1 + a42*y1 + a43*z1 + a44
//(x, y, z)就是(x1,y1,z1)对应的裁剪坐标
//注意w有可能小于0,如果w小于说明物体不在你的视角范围中(不需要在屏幕上显示)。
所以我们需要的就是通过组合矩阵的第一个元素a11为(-1,1)来搜索得到组合矩阵。
裁剪坐标 ----> NDC坐标
NDC坐标就是将裁剪坐标对应的xyz除以w,这就是透视分割算法(降维)。
NDC_X = X / W
NDC_Y = Y / W
NDC坐标 ----> 屏幕坐标
这需要一个视口变换矩阵,视口变换矩阵左乘NDC坐标就会得到对应的屏幕坐标。其中视口变换矩阵中fs和ns一般为0。
最后得到屏幕坐标的X = (Ws / 2 * NDC.x) + (NDC.x + Ws / 2), Y = -(Hs / 2 * NDC.y) + (NDC.y + Hs / 2)。而Ws * Hs为当前屏幕窗口的分辨率,且注意在windows中屏幕坐标系的规则
FPS游戏方框透视基本原理的更多相关文章
- FPS游戏逆向-方框透视(三角函数)
本套课程主要学习FPS类游戏安全 由于FPS类游戏本身的特性问题,可能产生一些通用的游戏安全问题 在通过逆向与正向对FPS类游戏分析之后,找到其可能出现的不安全点 才能更好的保护游戏不被外部力量侵犯 ...
- FPS 游戏实现D3D透视
FPS游戏可以说一直都比较热门,典型的代表有反恐精英,穿越火线,绝地求生等,基本上只要是FPS游戏都会有透视挂的存在,而透视挂还分为很多种类型,常见的有D3D透视,方框透视,还有一些比较高端的显卡透视 ...
- FPS 游戏实现GDI透视
FPS游戏可以说一直都比较热门,典型的代表有反恐精英,穿越火线,绝地求生等,基本上只要是FPS游戏都会有透视挂的存在,而透视挂还分为很多种类型,常见的有D3D透视,方框透视,还有一些比较高端的显卡透视 ...
- 怎样在Android开发中FPS游戏实现的两种方式比较
怎样在Android开发中FPS游戏实现的两种方式比较 如何用Android平台开发FPS游戏,其实现过程有哪些方法,这些方法又有哪些不同的地方呢?首先让我们先了解下什么是FPS 英文名:FPS (F ...
- FPS游戏服务器设计的问题 【转】
一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击游戏),你是要用TCP呢还是要用UDP,说明理由 . 二.学习 这是两篇网上找到的文章,写非常不错. 当时笔试的时 ...
- 在FPS游戏中,玩家对音画同步感知的量化与评估
前言 在游戏测试中,音画同步测试是个难点(所谓游戏音画同步:游戏中,音效与画面的同步程度),现在一般采用人工主观判断的方式测试,但这会带来2个问题: 无法准确量化,针对同一场景的多次测试结果可能会相反 ...
- Unreal Engine 4 系列教程 Part 10:制作简单FPS游戏
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- (转)FPS游戏服务器设计的问题
FPS游戏服务器设计的问题出处:http://www.byteedu.com/thread-20-1-1.html一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击 ...
- 关于FPS游戏的设计问题
第一个想到的问题: 首先以unity的FPSCharactorController为例,这里规定,相机的方向中心一定是瞄准的方向中心.设置身体的扭曲朝向相机方向,这样身体可以弯腰.你们看图中,我让玩家 ...
随机推荐
- jQuery学习笔记(2) jQuery选择器
jQuery的选择器完全继承了CSS的风格,利用jQuery选择器,可以非常便捷和快速地找出特定的DOM元素,然后为它们添加相应的行为. 目录 目录 CSS选择器 jQuery选择器 jQuery选 ...
- Android中的TaskStack及启动模式
目录 前言 如何观察ActivityStack? 几个问题 关键类介绍 ActivityStack的创建与种类 不同启动模式 launchMode Standard SingleTop SingleT ...
- 谈谈对IOC及DI的理解与思考
一.前言 在实际的开发过程中,我们经常会遇到这样的情况,在进行调试分析问题的时候,经常需要记录日志信息,这时可以采用输出到控制台. 因此,我们通常会定义一个日志类,来实现输出日志. 定义一个生成验证的 ...
- vue中的.sync修饰符用法
在项目中接触到父组件传值给子组件的时候,想在子组件改变父组件传的值.(比如用于弹窗关闭) 但是正常来说,vue2是不允许子组件直接改父组件传进去的值的. 所以我们需要在子组件内定义自定义事件,通知父组 ...
- 复制文件--cp
cp file1 file2 将文件拷贝到指定路径下 cp -r dir1 dir2 将文件夹拷贝到指定路径下
- 学习笔记-json数据格式化
标准的json : let result=[{"a": 'aa', "b": 'aa', "c": 'aa'}, {"a" ...
- 什么是 Ansible - 使用 Ansible 进行配置管理
[注]本文译自:https://www.edureka.co/blog/what-is-ansible/ Ansible 是一个开源的 IT 配置管理.部署和编排工具.它旨在为各种自动化挑战提供巨 ...
- JavaWeb 补充(Servlet)
Servlet: server applet 概念: 运行在服务器端的小程序 * Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则. * 将来我们自 ...
- Spring Authorization Server 全新授权服务器整合使用
前言 Spring Authorization Server 是 Spring 团队最新开发适配 OAuth 协议的授权服务器项目,旨在替代原有的 Spring Security OAuth 经过半年 ...
- No_leak(ret2ROP + 低字节改写到syscall)
No_leak 有这种题,题目很短小,只有一个read函数,没有输出函数,这样的题怎么解呢?当然首先想到的是ret2dl,但是那个有点儿复杂.下面我来介绍一种简单的解法. 代码如下: //gcc 1. ...