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,一经查实,立即删除!

相关文章

6、Cocos Creator 2D 渲染组件(一)

目录 1、Sprite 组件 2、Label 组件 3、Mask 组件 4、Graphics 组件 5、RichText 组件 1、Sprite 组件 2、Label 组件 3、Mask 组件 4、Graphics 组件 5、RichText 组件 6、BlockInputEvents 组件 BlockInputEvents 组件将拦截所属节点 bounding box 内的所有输入事件&a…

python多方式操作elasticsearch介绍

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

Java初级八股文面试题

1. Java的基本数据类型有哪些? 答:Java的基本数据类型包括: 整型:byte, short, int, long浮点型:float, double字符型:char布尔型:boolean 2. Java中的变量作用域有哪些? 答&…

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)--完全背包拓展题目…

计算机图形学和OpenGL

一.计算机图形学和OpenGL的推荐书籍: 1. **OpenGL编程指南(第九版)**(OpenGL Programming Guide, Ninth Edition):这本书是学习OpenGL编程的经典教材,详细介绍了OpenGL的基础知识和高级技术&…

《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 …

java普通类和抽象类有哪些区别?

普通类和抽象类在面向对象编程中有一些显著的区别,这些区别主要体现在类的定义、使用方式和实例化等方面。以下是它们之间的一些主要区别: 定义与实现: 普通类:普通类可以包含非抽象方法和抽象方法(如果有的话&#x…

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…

MongoDB聚合运算符:$ln

文章目录 MongoDB聚合运算符&#xff1a;$ln语法使用举例 MongoDB聚合运算符&#xff1a;$ln $ln聚合运算符计算数字的自然对数ln&#xff08;即 log e&#xff09;并将结果作为双精度值返回。 语法 { $ln: <number> }<number>表达式可以是任何有效的表达式&…

Hive常用函数_20个字符串处理

Hive常用函数_20个字符串处理 以下是Hive中常用的字符串处理函数&#xff0c;可用于执行各种字符串处理转换操作。 1. CONCAT()&#xff1a;将多个字符串连接在一起。 SELECT CONCAT(Hello, World); -- Output: HelloWorld2. SUBSTR()&#xff1a;从字符串中提取子字符串&…

基础拓扑排序

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

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

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

Vue PostCSS的使用介绍

PostCSS postcss 一种对css编译的工具&#xff0c;类似babel对js的处理&#xff0c;常见的功能如&#xff1a; 1 . 使用下一代css语法 2 . 自动补全浏览器前缀 3 . 自动把px代为转换成rem 4 . css 代码压缩等等 使用 创建好项目并且初始化npm init -y 创建一个页面&…

深入解析Oracle数据库merge

概念 Oracle数据库中的MERGE语句是一种强大的DML&#xff08;Data Manipulation Language&#xff09;操作&#xff0c;它允许用户在一个单一的SQL语句中根据特定的条件同时执行INSERT、UPDATE以及在某些情况下还包括DELETE操作。MERGE语句的核心功能是根据源数据&#xff08;…

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

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