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.x
        trs[1] = 0; // position.y
        trs[2] = 0; // position.z
        trs[3] = 0; // rotation.x
        trs[4] = 0; // rotation.y
        trs[5] = 0; // rotation.z
        trs[6] = 1; // rotation.w
        trs[7] = 1; // scale.x
        trs[8] = 1; // scale.y
        trs[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. 世界逆矩阵  对世界矩阵求逆,然后把世界坐标转换成节点坐标

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

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

相关文章

csp资料

头文件 #include <bits/stdc.h> using namespace std isdigit(c); isalpha(c); switch(type){case value : 操作 } continue;//结束本轮循环 break;//结束所在的整个循环tips: //除法变乘法来算 //减法变加法 num1e42;//"1e4"表示10的4次方//用于移除容器中相…

【面试专题】MySQL

1.什么是BufferPool&#xff1f; Buffer Pool基本概念 Buffer Pool&#xff1a;缓冲池&#xff0c;简称BP。其作用是用来缓存表数据与索引数据&#xff0c;减少磁盘IO操作&#xff0c;提升效率。 Buffer Pool由缓存数据页(Page) 和 对缓存数据页进行描述的控制块 组成, 控制…

鹏哥C语言复习——指针

目录 一.指针基础概念 二.指针和指针类型 三.野指针介绍 四.规避野指针的办法 五.指针运算 六.指针和数组 七.指针和数组传参 八.二级指针 九. 函数指针 十.qsort( )函数 十一.字符指针 一.指针基础概念 指针是什么&#xff1f; 指针理解的2个要点&#xff1a; 1.指…

java内存分析工具visualvm

java内存分析工具visualvm 下载地址:https://visualvm.github.io/

开源推荐榜【Taichi 专为高性能计算机图形学设计的编程语言】

Taichi是一个高性能的并行编程语言&#xff0c;它被嵌入在Python中&#xff0c;使得开发者能够轻松编写可移植的、高性能的并行程序。这个库的核心优势在于它能够将计算密集型的Python代码在运行时通过即时编译器(Just-In-Time, JIT)转换成快速的机器代码&#xff0c;从而加速P…

MT9630全制式Android智能商显解决方案

一、方案描述 商用显示通常是指专业显示器设备&#xff0c;可靠性和高清晰显示能力远强于普通显示器&#xff0c;在成像处理与色彩、亮度和对比度还有可视视角几方面具备优势&#xff0c;主要应用于商业场景&#xff0c;中国商业显示市场细分产品包括电子白板、商用电视、广告…

012_control_flow_in_Matlab中的控制流

Matlab中的控制流 虽然&#xff0c;我们说Matlab中的计算是向量化的&#xff0c;但是在某些情况下&#xff0c;作为一个“程序设计语言”&#xff0c;Matlab也提供了一些控制流结构&#xff0c;来帮助我们实现一些复杂的逻辑。 我会在介绍控制流的时候&#xff0c;提醒如何用…

大数据学习-2024/3/30-MySQL5.6版本的安装

1、下载好文件后打开bin目录&#xff1a; 2、在这个位置进入输入cmd进入命令行界面&#xff0c;进入命令行界面后输入如下&#xff1a;mysqld install 进行数据库安装&#xff1a; 注意&#xff1a;显示Service successfully installed表示安装成功 3、安装好后启动服务&…

通过mapreduce程序统计旅游订单(wordcount升级版)

通过mapreduce程序统计旅游订单&#xff08;wordcount升级版&#xff09; 本文将结合一个实际的MapReduce程序案例&#xff0c;探讨如何通过分析旅游产品的预订数据来揭示消费者的偏好。 程序概览 首先&#xff0c;让我们来看一下这个MapReduce程序的核心代码。这个程序的目…

上门家政按摩H5小程序源码

《服务器环境配置》 1、服务器环境&#xff1a;CentOS7 宝塔 Nginx php 2、环境&#xff1a;PHP7.2 MySQL5.6 3、安装扩展&#xff1a;fileinfo、redis 《程序安装配置》 1、新建站点及数据库&#xff0c;然后申请创建SSL证书&#xff0c;配置到站点&#xff0c;开启强…

GT20L16S1Y标准汉字字库芯片完全解析(3)

接前一篇文章&#xff1a;GT20L16S1Y标准汉字字库芯片完全解析&#xff08;2&#xff09; 本文内容参考&#xff1a; 字库芯片GT20L16S1Y使用记录-CSDN博客 GT20L16S1Y字库IC驱动_gt20l16s1y字库芯片测试程序-CSDN博客 《GT20L16S1Y 标准点阵汉字库芯片产品规格书 V4.0I_K 2…

信息工程大学第五届超越杯程序设计竞赛 题解

信息工程大学第五届超越杯程序设计竞赛 \huge{信息工程大学第五届超越杯程序设计竞赛} 信息工程大学第五届超越杯程序设计竞赛 写在前面 本篇题解按照题目难易顺序进行排序 大致难易顺序为&#xff1a;A<M<F<D<C<E<G<K<H<B<I<J A. 遗失的…

PCL点云处理之 基于垂直度检测与距离聚类 的路面点云提取方案 (二百三十九)

PCL点云处理之 基于垂直度检测与距离聚类 的路面点云提取方案 (二百三十九) 一、算法流程二、具体步骤1.垂直度检测与渲染1.代码2.效果2.水平分布点云提取1.代码2.效果3.路面连通点云提取1.代码2.效果三、完整代码四、参考文献一、算法流程

开发指南020-banner

<dependency><groupId>org.qlm</groupId><artifactId>qlm-common</artifactId><version>1.0-SNAPSHOT</version> </dependency> 以上组件封装了平台的banner&#xff0c;不做任何配置的话&#xff0c;将输出平台的banner 想修…

如何过得更幸福?我推荐你读这5本书

快乐不等于幸福。快乐是一种短暂的体验&#xff0c;随着多巴胺的消退而迅速减退。快乐是有捷径的&#xff0c;那就是戏弄相关的神经回路。 幸福是有意义、有目的和积极的生活的持久体验。 今天&#xff0c;为大家推荐一份“幸福书单”。 01 《幸福的勇气》 岸见一郎、古贺史…

【Linux实践室】Linux用户管理实战指南:用户权限切换操作详解

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;图形化界面登录2.2 &#x1f514;使用login…

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…

2024蓝旭春季第二次前端培训课

目录 CSS伪类与伪元素 伪类 伪元素 关系选择器 分类举例 后代选择器 子元素选择器 相邻兄弟选择器 通用兄弟选择器 作用使用场景 后代选择器&#xff08;空格&#xff09; 子元素选择器 (>) 相邻兄弟选择器 () 通用兄弟选择器 (~) 随机提问 CSS布局 基础布局…

群晖配置FTP服务结合内网穿透实现公网访问本地NAS中储存文件

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具&#xff0c;实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

服务器监控软件夜莺采集监控(三)

文章目录 一、采集器插件1. exec插件2. rabbitmq插件3. elasticsearch插件 二、监控仪表盘1. 系统信息2. 数据服务3. NginxMQ4. Docker5. 业务日志 一、采集器插件 1. exec插件 input.exec/exec.toml [[instances]] commands ["/home/monitor/categraf/scripts/*.sh&q…