cocos2.x => node 属性修改

简介

与节点属性相关的几个核心变量_trs、_matrix、_worldMatrix、_localMatDirty、_worldMatDirty。

_trs:存储节点的position、rotation、scale

_matrix:存储节点的缩放、位移、旋转三者合一的变化矩陈(仿射矩陈)

_worldMatrix:存储节点的世界矩陈。本地矩陈与父节点的世界矩陈相乘而来

_localMatDirty:本地脏数据的标记  当你修改position、rotation、scale、anchor时会进行对应的标记。它是个二进制数表示。根据标记更新_matrix。

_worldMatDirty:当你修改节点的position、rotation、scale、anchor属性时 都会标记为true。它是个Boolean值。true 时,会重新计算时间矩阵,并所有子节点的世界矩阵也会标记为脏

这些值的初始化:

Mat4.identity(this._matrix); //单位向量Mat4.identity(this._worldMatrix);//单位向量this._localMatDirty = LocalDirtyFlag.ALL;this._worldMatDirty = true;let trs = this._trs = spaceInfo.trs;trs[0] = 0; // position.xtrs[1] = 0; // position.ytrs[2] = 0; // position.ztrs[3] = 0; // rotation.xtrs[4] = 0; // rotation.ytrs[5] = 0; // rotation.ztrs[6] = 1; // rotation.wtrs[7] = 1; // scale.xtrs[8] = 1; // scale.ytrs[9] = 1; // scale.z

position 修改

_trs: 0/1/2  索引的值

_localMatDirty:添加  ALL_POSITION

_worldMatDity:true

_renderFlag:添加 LAG_WORLD_TRANSFORM

scale 修改

_trs: 7/8/9  索引的值

_localMatDirty:添加  ALL_SCALE

_worldMatDity:true

_renderFlag:添加 FLAG_TRANSFORM

rotation 修改

_trs:3/4/5/6  索引的值

_localMatDirty:添加  ALL_ROTATION

_worldMatDity:true

_renderFlag:添加 FLAG_TRANSFORM

特殊值处理

size

size 大小变化时,只更新到临时变量

anchor  

_localMatDirty:添加  ALL_POSITION

_worldMatDity:true

_renderFlag:添加 FLAG_WORLD_TRANSFORM

本地矩陈(防射矩陈)

本地矩阵主要描述了节点的位置、旋转、缩放的三者合一的矩阵。一般用于获取节点的世界矩阵,使用本地矩阵乘以父节点的世界矩阵即可获得自己的世界矩阵。二维矩阵(绕z轴旋转)

世界矩陈

世界矩阵是通过本地矩阵乘以父节点的世界矩阵而来。世界矩阵可以把节点的局部坐标转换成世界坐标。

矩阵应用

convertToWorldSpaceAR   将节点坐标系下的一个节点转换成世界坐标系

  convertToWorldSpaceAR (nodePoint, out) {this._updateWorldMatrix(); //更新世界矩阵if (nodePoint instanceof cc.Vec2) {out = out || new cc.Vec2();return Vec2.transformMat4(out, nodePoint, this._worldMatrix);}else {out = out || new cc.Vec3();return Vec3.transformMat4(out, nodePoint, this._worldMatrix);}}

例如:节点A坐标Point 如何得到世界坐标?

const worldPoint = A.parent.convertToWorldSpaceAR(Point);

convertToNodeSpaceAR  将节点的世界坐标转换到节点坐标系下

 convertToNodeSpaceAR (worldPoint, out) {this._updateWorldMatrix();Mat4.invert(_mat4_temp, this._worldMatrix); //求世界矩阵的逆矩阵if (worldPoint instanceof cc.Vec2) {out = out || new cc.Vec2();return Vec2.transformMat4(out, worldPoint, _mat4_temp);}else {out = out || new cc.Vec3();return Vec3.transformMat4(out, worldPoint, _mat4_temp);}},

例如:节点A的世界坐标worldPoint ,如何得到它在父节点坐标系的坐标?

const point = A.parent.convertToNodeSpaceAR(worldPoint);

总结

  1. 节点属性(sacle、rotation)修改都需要更新自身的本地矩阵。
  2. 本地矩阵是相对于父节点的坐标系的,同时本地矩阵是缩放、旋转、位移三个矩阵合一的仿射矩阵。
  3. 世界矩阵 可以通过本地矩阵乘以父节点矩阵而来,节点坐标乘以父节点的世界矩阵即可得到世界坐标
  4. 世界逆矩阵  对世界矩阵求逆,然后把世界坐标转换成节点坐标

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

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

相关文章

python多方式操作elasticsearch介绍

python多方式操作elasticsearch介绍 1. requests模块操作ES ​ requests 是一个 Python HTTP 库,它简化了发送 HTTP 请求和处理响应的过程。通过 requests 模块,开发人员可以轻松地与 Web 服务进行通信,包括获取网页内容、执行 API 请求等。…

Qt for WebAssembly 环境搭建 - Windows新手入门

Qt for WebAssembly 环境搭建 - Windows新手入门 一、所需工具软件1、安装Python2、安装Git2.1 注册Github账号2.2 下载安装Git2.2.1配置Git:2.2.2 配置Git环境2.2.3解决gitgithub.com: Permission denied (publickey) 3 安装em编译器 二、Qt配置编译器三、参考链接…

怎么让ChatGPT批量写作原创文章

随着人工智能技术的不断发展,自然语言处理模型在文本生成领域的应用也日益广泛。ChatGPT作为其中的佼佼者之一,凭借其强大的文本生成能力和智能对话特性,为用户提供了一种高效、便捷的批量产出内容的解决方案。以下将就ChatGPT批量写作内容进…

厦门攸信技术亮相新技术研讨会,展现物流自动化解决方案新高度!

今日,厦门攸信信息技术有限公司受邀参加了一场备受行业关注的电子制造高端盛会——一步步新技术研讨会,凭借卓越的智能制造与物流自动化技术在会议中大放异彩。作为一家引领行业发展的企业,厦门攸信技术不仅展示了其深厚的技术底蕴&#xff0…

算法系列--动态规划--背包问题(4)--完全背包拓展题目

💕"这种低水平质量的攻击根本就不值得我躲!"💕 作者:Lvzi 文章主要内容:算法系列–动态规划–背包问题(4)–完全背包拓展题目 大家好,今天为大家带来的是算法系列--动态规划--背包问题(4)--完全背包拓展题目…

《web应用技术》第一次课后练习

上机任务(利用好chatgpt,文心一言等工具。): 1、下载软件,并安装。相关安装文件已上传至群文件。 JDK,TOMCAT,IDEA 2、学会用记事本编写jsp文件,并放进tomcat的相关目录下,运行。 …

使用Windows自带服务(BitLocker)加密U盘

第一步:启用 BitLocker 服务 1.1快捷键:WinR 调出运行框,输入services.msc 1.2找到服务列表中的BitLocker Drive Encryption Service,启动此项 第二步:加密U盘 把你的U盘插入电脑,打开“我的电脑”&#…

EFCore的空迁移(EFCore操作已存在的数据库表,不影响其中的数据)

背景:EFCore默认的会自动创建数据表,但是有时又是DBFirst,数据库写好了要用现成的表。这个时候就需要进行一些特殊的操作了 1、写出跟要对接数据库的实体类 比如我的表是这样创建的 create table mail_test (user_id bigint auto_increment …

OSCP靶场--Twiggy

OSCP靶场–Twiggy 考点(CVE-2020-11651[RCE]) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.216.62 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-30 06:43 EDT Nmap scan report for 192.168.216.62 Host i…

基础拓扑排序

前言 拓扑排序是一种针对“有向无环图”的算法,用于解决一些有“依赖关系”的问题。 拓扑排序保证了当处理到某个电时,其所有的如电都已经处理过了。 例如右边这个图,拓扑序可以保证处理点2之前,点4和点6都处理过了、处理点3之…

IDEA的使用(概念,安装,配置,)以及什么是字符集,模版

目录 Intellij IDEA IDE的概念 IntelliJ IDEA的安装 IntelliJ IDEA的使用 基本配置 JDK配置 创建Module 基本用法 字体配置 主题配置 字符集 设置IDEA默认字符集 注释模板 字符集 字符集简介 常见字符集 Intellij IDEA 我们不可能一直使用记事本之类变成&#…

何恺明重提十年之争——模型表现好是源于能力提升还是捕获数据集偏置?

想象一下,如果把世界上所有的图片都找来,给它们放到一块巨大的空地上,其中内容相似的图片放得近一些,内容不相似的图片放得远一些(类比向量嵌入)。然后,我随机地向这片空地撒一把豆子&#xff0…

【C#】知识点速通

前言: 笔者是跟着哔站课程(Trigger)学习unity才去学习的C#,并且C语言功底尚存,所以只是简单地跟着课程将unity所用的C#语言的关键部分进行了了解,然后在后期unity学习过程中加以深度学习。如需完善的C#知识…

码支付个人支付宝永不掉线使用教程

​支付宝免CK添加操作稍微繁琐点,请耐心观看 此通道必须关闭你的余额宝自动转入功能,否则可能造成不跳转 支付宝添加的所有通道均支持H5免输入收款 第一步:打开支付宝开发平台,然后用你的支付宝注册登陆:https://op…

算法学习——LeetCode力扣动态规划篇5

算法学习——LeetCode力扣动态规划篇5 198. 打家劫舍 198. 打家劫舍 - 力扣(LeetCode) 描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统…

python学习16:python中的布尔类型和条件语句的学习

python中的布尔类型和条件语句的学习 1.布尔(bool)类型的定义: 布尔类型的字面量:True表示真(是、肯定) False表示假(否、否定) True本质上是一个数字记作1,False记作0 …

遥感数字图像处理的学习笔记

相关链接: 遥感数字图像处理实验教程(韦玉春)--部分实验问题回答 目录 1.什么是图像,什么是数字图像? 2.什么是遥感数字图像?模拟图像(照片)与遥感数字图像有什么区别? 3.什么是遥感数字图像…

构建操作可靠的数据流系统

文章目录 前言数据流动遇到的困难先从简单开始可靠性延迟丢失 性能性能损失性能——分层重试 可扩展性总结 前言 在流式架构中,任何对非功能性需求的漏洞都可能导致严重后果。如果数据工程师没有将可伸缩性、可靠性和可操作性等非功能性需求作为首要考虑因素来构建…

智慧公厕的全域感知、全网协同、全业务融合和全场景智慧赋能

公共厕所是城市的重要组成部分,为市民提供基本的生活服务。然而,传统的公厕管理模式存在诸多问题,如排队等候时间长、卫生状况差、空气质量差等,严重影响市民的出行和生活质量。为了解决这些问题,智慧公厕应运而生&…

【Python基础教程】4 . 算法的空间复杂度

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:python基础教程 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、…