热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

理解ue4的坐标转换

问题1:一个actor的component的relativetransform包含location、rotator、scale是相对于谁来说的?猜想:是

问题1:一个actor的component的relativetransform包含location、rotator、scale是相对于谁来说的?
猜想:是相对于就近component来说的
证明:通过getrelativelocation,一层一层往上层component坐标系移动(transformlocation)直到转到世界坐标系,在ue4 editor中,选中你要转的actor,然后修改transform中location的相对位置,把relative改成world,与转出来的值做对比,如果一致,证明是对的或者直接将算出来的值覆盖原来关卡中操作Actor的值,观察Actor是否与原来的一致

问题2:如何证明自己是否理解坐标转换?
证明:通过在ue4 editor中,拼一个多层嵌套,操作其中一个component,通过一层一层向世界坐标系转,记录值,在editor中同思考1去验证结果,然后再一层层转向原来的本地坐标,如果能还原actor,证证明理解对了

结论:如果问题1验证正确,问题2也验证正确,则多层嵌套中的component不能直接通过该actor的transform,直接转向世界坐标系

问题3:如何快速将多层嵌套的component的位置、旋转、缩放转到根component的做坐标系
思路:ue4提供直接转世界坐标系的接口,所以先转到世界坐标系,然后通过transformlocation转到rootcomponent坐标系

问题4:查看getworldlocation的实现,证明问题1?

问题5:位置是一个vector,模型中的点也是一个vector,对于坐标系的转换,是否也是一样?

测试总结:基本思路是对的,但是通过ue4 GetWorldLocation和一层层转化到世界坐标系不是完全一样;但是基本一致,GetWorldLocation里面的实现是算出最终的Transform然后通过点转换,而一层层转换是拿到每一层转换后的点与上层再次转换得到,中间有浮点数,会因为精度问题造成最终值的不同。在关卡中选中操作的Actor,查看Transform中绝对坐标也与算出来的基本一致;GetWorldRotator与一层层算出的结果相差很大,因为欧拉角有万象锁问题,即同一个方向对应多个欧拉值造成的,算出的值与editor的也不一样。

问题6:证明世界旋转值,三种方法值不一样,是由欧拉角造成的?
猜想:将算出的值,将在关卡并选中Actor,切换Actor旋转的坐标系,把值赋值给旋转,看关卡中表现是否一样,如果一样证明是对的

问题7:如何判断当前坐标系属于左手还是右手坐标系?

问题8:如何判断轴的旋转方向?
猜想:将右手大拇指指向轴延伸方向,即值越来越大的方向,然后其余手指弯曲,弯曲方向即为顺时针方向
验证:通过控制pawn的摄像机,看摄像机看向的方向是否与除大指姆外,其余指姆指尖指向的方向,切旋转值在变大

问题9:拿到一个transform值,能想象到在场景中的物体应该是什么样子或者说我能能拿现实中的物体,通过transform能知道物体最终的状态?
猜想:明确Rotator的正值,表示是延顺时针方向旋转;根据左手法则和右手法则,即通过坐标系选择是左手法则【对应左手坐标系】还是右手坐标系判断正方向;明确ue4中,Z轴旋转是按左手坐标系旋转;X轴和Y轴是延右手坐标系旋转;明确ue4中相对坐标系的旋转顺序是Yaw-Pich-Roll【Z-Y-Z】;世界坐标系的旋转坐标系是Roll-Pich-Yaw【X-Y-Z】;明确旋转一个轴后,坐标轴方向也在旋转,在确定下一个旋转方向时,要在新的坐标系进行判断;所以拿到具体的旋转值,要看该值是相对值,还是世界坐标值,然后通过旋转顺序去旋转,通过左右手法则以及ue4在实际旋转轴对应的坐标系来确定往什么方向旋转,旋转多少度;旋转一个轴后,要在新的坐标系下进行下一个轴旋转


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
author-avatar
水门街口卖瓜子的
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有