C++游戏引擎中的坐标系

news2025/2/26 18:12:59

一.Direct3D四大变换

    <1.世界矩阵变换:

       为了模拟3D物体的旋转,缩放,平移等功能,Direct3D将静态模型的顶点坐标x,y,z经过旋转平移矩阵变换以得到新的顶点坐标x1,y1,z1

D3DXMATRIX mTrans ;  
D3DXMatrixTranslation (&mTrans , 5 , - 3 , 0 );  
g_pd3dDevice->SetTransform (D3DTS_WORLD , &mTrans) ;  

    <2.取景变换:

      为投影变换做准备,设置摄像机camera的坐标,观察点坐标,观察方向向量.

D3DXMATRIX matView; //定义一个矩阵  
D3DXVECTOR3 vEye(0.0f, 0.0f, -200.0f);  //摄像机的位置  
D3DXVECTOR3 vAt(0.0f, 0.0f, 0.0f); //观察点的位置  
D3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);//向上的向量
D3DXMatrixLookAtLH(&matView, &vEye, &vAt, &vUp); //计算出取景变换矩阵  
g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView); //应用取景变换矩阵 

    <3.投影变换:

       计算机屏幕是2D界面,为了渲染3D模型故设计投影变换矩阵,可将3D模型投影到2D屏幕上.投影变换矩阵可设置摄像机光圈大小,视觉深度等参数.

D3DXMATRIX matProj; //定义一个矩阵  
D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI / 4.0f, 1.0f, 1.0f, 1000.0f);//计算投影变换矩阵  
g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj); //设置投影变换矩阵  

    <4.视口变换

       将投影结果选择性投射到2D屏幕中.

D3DVIEWPORT9 vp; //实例化一个D3DVIEWPORT9结构体,然后做填空题给各个参数赋值就可以了  
vp.X      = 0;      //表示视口相对于窗口的X坐标  
vp.Y      = 0;      //视口相对对窗口的Y坐标  
vp.Width  = WINDOW_WIDTH;   //视口的宽度  
vp.Height = WINDOW_HEIGHT; //视口的高度  
vp.MinZ   = 0.0f; //视口在深度缓存中的最小深度值  
vp.MaxZ   = 1.0f;   //视口在深度缓存中的最大深度值  
g_pd3dDevice->SetViewport(&vp); //视口的设置  

二.Unity3D中的坐标系

     为了简化矩阵变换操作和实际应用,游戏引擎将矩阵变换经过封装和处理后变成坐标系,通过提供坐标系之间的变换接口实现我们常用的功能.

     世界坐标系:与Direct3D世界坐标系相同,是物体的世界坐标x,y,z

     局部坐标系:与世界矩阵变换对应的坐标系,物体局部坐标×世界矩阵变换 = 物体世界坐标x,y,z

     屏幕坐标系:与投影变换对应的坐标系,物体世界坐标×投影变换矩阵=2D屏幕坐标x,y

     视口坐标系:与视口变换矩阵对应,2D屏幕坐标x,y×视口变换矩阵=2D视口坐标x,y

三.相对坐标与相对运动

     在实际的游戏场景中,人物或者物体的移动是向前,向后,向左运动,是基于局部坐标系的位置偏移量.A物体与B物体的运动关系也是相对运动关系.

     C++游戏引擎一般提供绕世界坐标系旋转,绕本地坐标系旋转,沿本地坐标系移动,沿世界坐标系移动,获取一个物体相对于另一个物体的相对坐标等API实现物体相对运动坐标的确定和调整.

     例如Unity3D中提供各个坐标系转化,物体与物体间相对坐标系转化.

Unity坐标系、相互转换和相对自身的方位及角度。_unity鼠标点击位置转换屏幕坐标-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/u013774978/article/details/129869572

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1373152.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Avalonia学习(二十)-登录界面演示

今天开始继续Avalonia练习。 本节&#xff1a;演示实现登录界面 在网上看见一个博客&#xff0c;展示Avalonia实现&#xff0c;仿照GGTalk&#xff0c;我实现了一下&#xff0c;感觉是可以的。将测试的数据代码效果写下来。主要是样式使用&#xff0c;图片加载方式。 只有前…

移远通信推出两款Wi-Fi 7模组新品,赋能无线连接巅峰体验

​1月9日&#xff0c;在2024年国际消费电子产品展览会 (CES) 期间&#xff0c;全球领先的物联网整体解决方案供应商移远通信宣布&#xff0c;正式推出支持Wi-Fi 7技术的通信模组FGE576Q和FGE573Q &#xff0c;这两款模组将以前沿的Wi-Fi性能突破无线连接边界&#xff0c;为下一…

JVM工作原理与实战(十二):打破双亲委派机制-自定义类加载器

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、打破双亲委派机制的方法 二、自定义类加载器 1.Tomcat自定义类加载器案例 2.自定义类加载器详解 3.案例解析 总结 前言 JVM作为Java程序的运行环境&#xff0c;其负责解释和执…

探索未来餐饮:构建创新连锁餐饮系统的技术之旅

随着数字化时代的发展&#xff0c;连锁餐饮系统的设计和开发不再仅仅关乎订单处理&#xff0c;更是一场充满技术创新的冒险。在本文中&#xff0c;我们将深入研究连锁餐饮系统的技术实现&#xff0c;带你探索未来餐饮业的数字化美食之旅。 1. 构建强大的后端服务 在设计连锁…

windows安装Elasticsearch后使用ik分词器报错解决办法

最近在学习Elasticsearch&#xff0c;安装完成后下载了ik分词器压缩到plugins目录下启动es报错如下&#xff1a; java.security.AccessControlException: access denied (“java.io.FilePermission” “D:…\plugins\ik-analyzer\config\IKAnalyzer.cfg.xml” “read”)咋一看…

k8s的存储卷、数据卷

容器内的目录和宿主机目录进行挂载。 容器在系统上的生命周期是短暂的。 k8s用控制器创建的pod。delete相当于重启。容器的状态也会恢复到初始状态。一旦恢复到初始状态&#xff0c;所有的后天编辑的文件都会消失 容器和节点之间创建一个可以持久化保存容器内文件的存储卷。…

OpenCV-21方盒滤波和均值滤波

一、方和滤波 使用API --- boxFiter(src, ddepth, ksize[,dst[,anchor[, normalize[, borderType]]]])方盒滤波 方盒滤波的卷积核如下所示&#xff1a; --- normalize Ture时&#xff0c; a 1 / &#xff08;W*H&#xff09;滤波器的宽高 --- normalize False时&#xff…

【大数据OLAP引擎】StartRocks存算分离

存算分离的原因 降低存储成本&#xff1a;同样的存储大小对象存储价格只有SSD的1/10&#xff0c;所以号称存储成本降低80%不是吹的。 存算一体到存算分离 存算一体 作为 MPP 数据库的典型代表&#xff0c;StarRocks 3.0 版本之前使用存算一体 (shared-nothing) 架构&#xf…

mysql主从复制教程

1、介绍 1.1 是什么 主从复制&#xff0c;是用来建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库 1.2 有什么用 数据备份&#xff1a;通过主从复制&#xff0c;可以将主数据库的数据复制到一个或多个从数据库中&#xff0c;以实现数据备份和灾难恢复。当主…

免费简单好用的 webshell 在线检测:支持 php、jsp、asp等多格式文件

话不多说&#xff0c;直接上图上链接&#xff1a;https://rivers.chaitin.cn/?share3d4f2e8aaec211eea5550242c0a8170c 还是比较好用的&#xff0c;支持 PHP、JSP 文件 webshell 检测&#xff0c;看官方解释文档&#xff0c;引擎使用静态文本特征、骨架哈希、静态语义分析、动…

【Github-Action】GithubAction 环境下,如何将临时生成的文件推送至指定分支。

通过这篇文章你可以掌握如何将github action 环境下临时生成的文件推送至指定分支&#xff0c;并且可以打开利用github开放的api做各种强大或有趣的事情的视野和思路。 如果你对github-action感兴趣&#xff0c;还可以看这篇文章&#xff0c; 这篇文章教会你如何开发Github Act…

多局域网UDP通信测试

今天遇到一个问题&#xff1a; 一台电脑同时连接A、B两个路由器的网络&#xff0c;同时分别收发各自局域网中的消息&#xff0c;是否可行&#xff1f; 理论上可以&#xff0c;测试一下吧 电脑同时连接两个网络 两个网络的网段分别为3和1 在同一个程序中使用两个网络连接的地…

计算机体系结构----计分板(scoreboard)算法

计分板算法简介 计分板记录着所有必要的信息&#xff0c;用来控制以下事情&#xff1a; 每条指令何时可以读取操作数并投入运行&#xff08;对应着RAW冲突的检测&#xff09;每条指令何时可以写入结果&#xff08;对应着WAR冲突的检测&#xff09;在计分板中&#xff0c;WAW冲…

css三大特性

css 三大特性 一、层叠性&#xff1a;css样式冲突采取原则&#xff08;后者覆盖前者&#xff09; 二、继承性&#xff1a;对于部分属性样式会有天生的继承 &#xff08;1&#xff09;字体系列属性 font-family&#xff1a;字体系列 font-weight&#xff1a;字体的粗细 fon…

TS 36.306 V12.0.0

​本文的内容主要涉及TS 36.306&#xff0c;版本是C00&#xff0c;也就是V12.0.0。

鸿蒙Harmony--状态管理器--双向同步@Link详解

你这一生最重要的责任&#xff0c;就是保护好自己脆弱的梦想&#xff0c;熬过被忽略的日子&#xff0c;就轮到你上场了。 如何解决大模型的「幻觉」问题&#xff1f; 目录 一&#xff0c;定义 二&#xff0c;装饰器使用规则说明 三&#xff0c;变量的传递/访问规则说明 四&…

web第一次作业

题1&#xff1a; <form action"#" method"post"><table><tr><td>用户名&#xff1a;</td><td><input type"text" name"UserName" maxlength"20" size"15"></td>…

Windows启动MongoDB服务报错(错误 1053:服务没有及时响应启动或控制请求)

问题描述&#xff1a;修改MongoDB服务bin目录下的mongod.cfg&#xff0c;然后在任务管理器找到MongoDB服务-->右键-->点击【开始】&#xff0c;启动失败无提示&#xff1a; 右键点击任务管理器的MongoDB服务-->点击【打开服务】&#xff0c;跳转到服务页面-->找到M…

C# 使用Fleck创建WebSocket服务器

目录 写在前面 代码实现 服务端代码 客户端代码 调用示例 写在前面 Fleck 是 C# 实现的 WebSocket 服务器&#xff0c;通过 WebSocket API&#xff0c;浏览器和服务器只需要做一个握手的动作&#xff0c;然后浏览器和服务器之间就形成了一条快速通道&#xff1b;两者之间…

机器学习周刊第二期:300个机器学习应用案例集

大家好 前文&#xff1a;机器学习项目精选 第一期 继续分享我最近看过并觉得非常硬核的资源&#xff0c;包括Python、机器学习、深度学习、大模型等等。 1、Python编程挑战 地址&#xff1a;https://github.com/Asabeneh/30-Days-Of-Python 30天Python编程挑战是一个逐步学…