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

一.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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

app小程序开发定制?智创开发

模板小程序和定制小程序效果有很明显的差距的&#xff0c;二者开发花费的时间也不一样&#xff0c;价格自然也就不一样&#xff0c;主要区别在以下几个方面&#xff0c;大家可以参考&#xff0c;根据自身的情况进行选择。 1&#xff09;效果不一样 模板&#xff0c;顾名思义&…

出版实务 | 出版物的成本及其构成

文章目录 出版物成本的总体构成直接成本开发成本制作成本 间接成本期间费用 本量利分析原则特点和作用变动成本项目固定成本项目本量利分析的基本公式及其应用定价发行折扣率销售数量单位销售收入销售收入总额单位销售税金销售税金总额变动成本总额单位变动成本固定成本总额单位…

如何查看Ubuntu内存的使用情况

在Linux系统中&#xff0c;了解内存使用情况对于系统管理和性能优化非常重要。以下是一些常用的命令&#xff0c;以及它们的详细使用说明&#xff1a; 1. free 命令 用途: free 命令用于显示系统中空闲和已用的物理内存及交换内存。示例: 输入命令: free -m输出解释: 这将以M…

flutter 打包IOS及常用配置

修改APP名称 项目名字配置是在 ios/Runner/Info.plist 文件中的 dict 下的 CFBundleName testapp 。如下图所示: String里面就可以修改名称 修改项目 &#xff08;testapp&#xff09;的 Logo 图标 iOS 项目 Logo的配置是在 ios/Runner/Assets.xcassets/AppIcon.appiconset 文…

【LangChain学习之旅】—(5) 提示工程(上):用少样本FewShotTemplate和ExampleSelector创建应景文案

【LangChain学习之旅】—&#xff08;5&#xff09; 提示工程&#xff08;上&#xff09;&#xff1a;用少样本FewShotTemplate和ExampleSelector创建应景文案 提示的结构LangChain 提示模板的类型使用 PromptTemplate使用 ChatPromptTemplateFewShot 的思想起源使用 FewShotPr…

冠军团队!第二届百度搜索创新大赛AI方案

Datawhale干货 作者&#xff1a;李柯辰&#xff0c;Datawhale成员 写在前面 大家好&#xff0c;我们是2023年第二届百度搜索创新大赛 赛道三——AI应用设计赛道的冠军团队——“肝到凌晨”&#xff0c;很高兴能与大家分享我们这次比赛的经验&#xff0c;同时也希望以后有机会可…

RocketMQ 消费重试

消费者出现异常&#xff0c;消费某条消息失败时&#xff0c; Apache RocketMQ 会根据消费重试策略重新投递该消息进行故障恢复。本文介绍消费重试机制的原理、版本兼容性和使用建议。 一、应用场景​ Apache RocketMQ 的消费重试主要解决的是业务处理逻辑失败导致的消费完整性…

从0到1入门C++编程——05 类和对象之运算符重载、继承

文章目录 运算符重载1.加号运算符重载2.左移运算符重载3.递增运算符重载4.赋值运算符重载5.关系运算符重载6.函数调用运算符重载 继承1.继承的基本语法及继承方式2.继承中的对象模型3.继承中构造函数和析构函数的顺序4.继承中同名成员的处理方式5.继承中同名静态成员处理方式6.…

Unity中URP下实现能量罩(交接处高亮)

文章目录 前言一、交接处高亮 原理1、 我们先用一个球作为能量罩、一个Cube 和 一个 椭球 作为与能量罩交接的物体2、 这是我们目前场景的深度图3、使能量罩为 半透明渲染队列 且 关闭深度写入 不渲染深度图 二、交接处高亮 实现1、得到深度图2、在片元着色器中&#xff0c;对深…

重新认识Elasticsearch-一体化矢量搜索引擎

前言 2023 哪个网络词最热&#xff1f;我投“生成式人工智能”一票。过去一年大家都在拥抱大模型&#xff0c;所有的行业都在做自己的大模型。就像冬日里不来件美拉德色系的服饰就会跟不上时代一样。这不前段时间接入JES&#xff0c;用上好久为碰的RestHighLevelClient包。心血…

静态网页设计实践(HTML+CSS)

一、前端程序员必会三大编程语言 &#xff08;一&#xff09;HTML&#xff08;.html/.htm&#xff09; 超文本标记语言&#xff08;HyperText Markup Language&#xff0c;简称:HTML&#xff09;是一种用于创建网页的标准标记语言。HTML是一种基础技术&#xff0c;常与CSS、Ja…

YOLOv8改进 | 二次创新篇 | 结合iRMB和EMA形成全新的iEMA机制(全网独家创新)

一、本文介绍 本文给大家带来的改进机制是二次创新的机制,二次创新是我们发表论文中关键的一环,为什么这么说,从去年的三月份开始对于图像领域的论文发表其实是变难的了,在那之前大家可能搭搭积木的情况下就可以简单的发表一篇论文,但是从去年开始单纯的搭积木其实发表论…

JWT的初级认识

文章目录 一.什么是JWT二.JWT能够做什么1.授权2.信息交换 三.为什么我们使用JWT传统的基于session的认证流程基于JWT认证1.认证流程2.jwt优势 四.JWT的结构是什么Header的组成4.2 Header4.3 Payload4.4 Signature签名目的 五.使用JWT5.1 引入JWT依赖5.2 生成token5.3 根据令牌和…

vue element-ui的table列表中展示缩略图片效果实例

这篇文章主要给大家介绍了关于vue element-ui的table列表中展示多张图片(可放大)效果的相关资料,文中通过代码示例介绍的非常详细,需要的朋友可以参考下 一、效果图 二、代码部分 1、原理 使用 <el-table-column> 和 <el-image> 组件来在表格中插入缩略图 2、te…

回归预测 | Matlab基于SO-LSTM蛇群算法优化长短期记忆神经网络的数据多输入单输出回归预测

回归预测 | Matlab基于SO-LSTM蛇群算法优化长短期记忆神经网络的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SO-LSTM蛇群算法优化长短期记忆神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SO-LSTM蛇群算法优化…

py的循环语句(for和while)

前言&#xff1a;本章节和友友们探讨一下py的循环语句&#xff0c;主播觉得稍微有点难主要是太浑了&#xff0c;但是会尽量描述清楚&#xff0c;OK上车&#xff01;&#xff08;本章节有节目效果&#xff09; 目录 一.while循环的基本使用 1.1关于while循环 1.2举例 1.31-1…

TensorFlow相关组件的安装

安装Anaconda3 安装Anaconda3的时候可以安装在任意磁盘中&#xff0c;在勾选path的时候全部勾选即可。更换Anaconda3的下载源为清华大学源&#xff0c;在此期间不要打开Anaconda3&#xff0c;在cmd中依次输入以下即可&#xff1a; conda config --add channels https://mirro…

【JaveWeb教程】(17) MySQL数据库开发之 MySQL简介、安装、数据类型、SQL通用语法 详细代码示例讲解

目录 前言1. MySQL概述1.1 安装1.1.1 版本1.1.2 安装1.1.3 连接1.1.4 企业使用方式(了解) 1.2 数据模型1.3 SQL简介1.3.1 SQL通用语法1.3.2 分类 前言 在我们讲解SpringBootWeb基础知识(请求响应案例)的时候&#xff0c;我们讲到在web开发中&#xff0c;为了应用程序职责单一&…

搜索与图论第一期 DFS(深度优先搜索)

前言 DFS这部分难度不大&#xff0c;大家应该完全掌握&#xff01;&#xff01;&#xff01; 一、DFS的基本内容 内容&#xff1a; 深度优先遍历图的方法是&#xff0c;从图中某顶点v出发&#xff1a; &#xff08;1&#xff09;访问顶点v&#xff1b; &#xff08;2&#…

Element Plus 离线手册 下载

Element Plus (Vue3) 离线手册&#xff0c;解压就能用&#xff0c;双击运行&#xff0c;浏览器访问 http://localhost:7011 获取方式&#xff1a;原文关注微信公众号&#xff0c;回复消息&#xff1a;7011ELP Element Plus 离线手册 下载Vue3 Element Plus 离线手册 离线文档 …