第三篇:实践篇 《使用Assembler 实现图片任意切割功能》

实现原理:

共用一个texture、material、渲染状态等。紧通过修改vertex、uvs、indexes数据即可实现任意切割功能。

一、线段分割多边形,并分散多边形

  • 线段分割多边形

已知多边形points,线段sp、ep。线段分割多边形得到两个多边形。

public splitPolygon(points: cc.Vec2[],sp: cc.Vec2,ep: cc.Vec2): cc.Vec2[][] {console.log(points);let intersectCount = 0;const polygon1 = [];const polygon2 = [];for (let i = 0; i < points.length; i++) {const p1 = points[i];const p2 = points[(i + 1) % points.length];this.convertToInt([p1, p2]);if (intersectCount === 0) {polygon1.push(p1);} else if (intersectCount === 1) {polygon2.push(p1);} else if (intersectCount === 2) {polygon1.push(p1);}const point = segmentIntersect(sp, ep, p1, p2);if (point !== null) {this.convertToInt([point]);polygon1.push(point);polygon2.push(point);intersectCount++;}}if (intersectCount === 2) {return [polygon1, polygon2];}return [polygon1];}
  • 获得多边形数组创建成sprite 

//分割多边形splitSprites(sprites: CustomSprite[]): void {for (let i = 0; i < sprites.length; i++) {console.log("第", i, "开始分割");const baseSprite = sprites[i];const points = baseSprite.getPolygon();const { sp, ep } = this.getLocalTouchEndPoint(baseSprite.node);const newPolygons = this.splitPolygon(points, sp, ep);newPolygons.forEach((polygon, i) => {if (i === 0) {baseSprite.setPolygon(polygon);} else {const node = new cc.Node();const sprite = node.addComponent(CustomSprite);sprite.texture2D = baseSprite.texture2D;node.parent = baseSprite.node.parent;node.position = baseSprite.node.position;sprite.setPolygon(polygon);this.customSprites.push(sprite);console.log("添加新的纹理");this.isDisperse = true;}});}}
  • 以线段为边界和几何中心点位置,把多边形分散

 //根据几何中心点拿到直线法向量分离disperseAllSprite(): void {if (!this.isDisperse) return;const { p1, p2 } = this.getGraphic();this.customSprites.forEach((sprite, i) => {const polygon = sprite.polygon;const centerP = calculatePolygonGeometryCenter(polygon);const wp = sprite.node.convertToWorldSpaceAR(centerP);const np = this.graphic.node.convertToNodeSpaceAR(wp);const pIntersect = pointLineNormal(np, p1, p2);const normal = pIntersect.normalize();sprite.node.x += normal.x * this.getDisperse();sprite.node.y += normal.y * this.getDisperse();sprite.setVertsDirty();// this.printPolygon(polygon);});}

二、Assembler自定义(vertex数据、uv数据、indexes数据)

第四篇:实践2 《使用MeshRender 实现图片任意切割功能》

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

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

相关文章

opencv 人脸识别,并抓拍

# -*- coding: utf-8 -*- import cv2 import imutils from crop_img import crop_and_save_image import datetime # 加载摄像头 cap cv2.VideoCapture(0) # 创建人脸检测器 face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml…

竞赛选题 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满…

oracle,CLOB转XML内存不足,ORA-27163: out of memory ORA-06512: at “SYS.XMLTYPE“,

通过kettle采集数据时&#xff0c;表输入的组件&#xff0c;查询报错。 ORA-27163: out of memory ORA-06512: at “SYS.XMLTYPE”, line 272 ORA-06512: at line 1 通过 ALTER SESSION SET EVENTS ‘31156 trace name context forever, level 0x400’; 修改会话配置 或直接修改…

网络协议--广播和多播

12.1 引言 在第1章中我们提到有三种IP地址&#xff1a;单播地址、广播地址和多播地址。本章将更详细地介绍广播和多播。 广播和多播仅应用于UDP&#xff0c;它们对需将报文同时传往多个接收者的应用来说十分重要。TCP是一个面向连接的协议&#xff0c;它意味着分别运行于两主…

安卓开发实例:方向传感器

调用手机的方向传感器&#xff0c;X轴&#xff0c;Y轴&#xff0c;Z轴的数值 activity_sensor.xml <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayoutxmlns:android"http://schemas.android.c…

结构伪类选择器

伪类选择器&#xff1a;用来描述一个元素的特殊状态&#xff01;比如第一个元素、某个元素的子元素、鼠标点击的元素 1 first-child/last-child /*ul的第一个子元素*/ ul li:first-child{ background: #0f35ad; } /*ul的最后一个子元素*/ ul li:last-child{ background: #0f3…

ExcelPatternTool 开箱即用的Excel工具包现已发布!

文章目录 ExcelPatternTool功能特点&#xff1a;快速开始使用说明常规类型高级类型Importable注解Exportable注解IImportOption导入选项IExportOption导出选项单元格样式StyleMapping样式映射使用数据库作为数据源 示例Sample1&#xff1a;不同类型字段导出Sample2&#xff1a;…

ChatGLM系列七:LangChain+ChatGLM-6B

背景介绍 在开发过程中&#xff0c;我们经常会遇到需要构建基于本地知识库的问答系统的问题。这种系统需要能够根据用户提供的问题&#xff0c;在本地的知识库中查找并返回相关答案。然而&#xff0c;要实现这样的功能并不容易&#xff0c;涉及到语言模型的选择、知识库的管理…

Vsan数据恢复—Vsan存储断电导致虚拟机无法启动的数据恢复案例

Vsan分布式存储故障&检测&#xff1a; 异常断电导致一台vsan存储设备上层虚拟机无法启动。 将故障Vsan存储上的所有磁盘编号后取出&#xff0c;由北亚企安的硬件工程师对vsan存储上的所有硬盘进行物理故障检测&#xff0c;经过检测没有发现硬盘存在物理故障。 vsan存储结构…

问界新M7也扛起“遥遥领先”大旗,华为究竟做对了什么?

循着时间脉络&#xff0c;华为似乎正在实现全方面的“遥遥领先”。 继Mate 60系列手机产品的强势回归之后&#xff0c;华为参与的汽车项目也登上了“热搜榜”。近段时间&#xff0c;问界新M7正处于“卖爆”状态。 据了解&#xff0c;2023年9月12日&#xff0c;华为发布了问界…

公网IP怎么设置?公网ip有哪些优点和缺点?

随着互联网的普及&#xff0c;越来越多的人开始关注网络安全和隐私保护。其中&#xff0c;公网IP的设置成为了一个备受关注的话题。本文将详细介绍公网IP的设置方法以及公网IP的优点和缺点。 一、公网IP设置方法 1. 路由器设置 在家庭或企业网络中&#xff0c;路由器通常是最重…

vue3实现一个滚动分页加载瀑布流列表

项目框架&#xff1a;vue3JSvite 瀑布流框架&#xff1a;vue-waterfall-next 问了chatGPT&#xff0c;对于vue3有哪些好用的瀑布流插件&#xff0c;回答如下&#xff1a; 对于 Vue 3&#xff0c;有一些瀑布流插件可供选择。以下是几个常用的 Vue 3 瀑布流插件&#xff1a; vue…

day44

什么是前端 前端是所有跟用户直接打交道的都可以称之为是前端 比如&#xff1a;pc页面、手机页面、平板页面、汽车显示屏等等显示出来的都是前端内容 什么是后端&#xff1f; 就是一堆代码&#xff0c;用户不能够直接看到&#xff0c;不直接与用户打交道的都是后端 常见的后端…

【Linux】开发工具

目录 Linux编译器-gcc/g使用执行命令&#xff1a;我们的.o和库是如何链接的? make/Makefile依赖关系、依赖方法 Linux编译器-gcc/g使用 gcc只能编译c语言&#xff0c;g可以编译c语言也可以编译g 背景知识&#xff1a; 预处理&#xff08;进行宏替换)编译&#xff08;生成汇编)…

荣耀推送服务消息分类标准

前言 为了提升终端用户的推送体验、营造良好可持续的通知生态&#xff0c;荣耀推送服务将对推送消息进行分类管理。 消息分类 定义 荣耀推送服务将根据应用类型、消息内容和消息发送场景&#xff0c;将推送消息分成服务通讯和资讯营销两大类别。 服务通讯类&#xff0c;包…

JS清除字符串中的空格

一、replace()方法 replace方法在字符串中搜索值或正则表达式&#xff0c;返回已替换值的新字符串&#xff0c;不会更改原始字符串。 去除字符串内所有的空格&#xff1a;str str.replace(/\s*/g,“”) 去除字符串内两头的空格&#xff1a;str str.replace(/^\s*|\s*$/g,“…

Mac怎么清理磁盘空间?释放Mac磁盘空间有效方法

相信很多使用macOS系统的小伙伴都收到过提示“磁盘空间已满”消息&#xff0c;尤其是采用SSD固态硬盘的MacBook系列&#xff0c;120G的硬盘空间本就捉襟见肘&#xff0c;使用一段时间后&#xff0c;即使自己没有存放很多大文件&#xff0c; Mac的磁盘很快就满了。那么&#xff…

使用python实现http协议的方法

要使用Python编写一个接口&#xff0c;其入参格式为x-www-form-urlencoded&#xff0c;你可以使用requests库。requests库是一个流行的HTTP库&#xff0c;它使得发送HTTP请求变得非常简单。 下面是一个简单的示例&#xff0c;展示如何使用requests库发送一个POST请求&#xff…

【面试经典150 | 链表】两数相加

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;模拟 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到…

全栈经验总结(不间断更新)

1.当后端传回来的值为列表套字典[{"id":1,"num":"1"},{"id":2"num":"3"}]&#xff0c;如果要在vue3里面渲染图片&#xff0c;可以这样操作 <el-form-item label"图片&#xff1a;"><el-uploa…