折纸效果! Cocos Creator 3.0

本文介绍了使用Cocos Creator 3.0实现折纸效果的思路和步骤,包括多边形的分割、线线交点计算、轴对称点的获取,以及渲染过程。通过简化计算,将问题转换为对凸多边形的操作,利用向量和几何原理完成计算,并通过自定义组装器进行渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果

折纸效果

实现

整体思路

思路遵循以下几步

  • 初始化一个多边形。

  • 折叠后分割成两个多边形。

  • 如果需要继续分割,对场上的所有多边形进行折叠,折叠出新的多边形的层级正好与原来的相反。

整体思路

所以,所有的计算和渲染都可以转换成对一个多边形的操作。

为了简化计算,我们约定初始化的多边形为凸多边形。这么做有几个好处。

  • 折叠后生成的仍是凸多边形,并且对于每个多边形只会折叠出两个凸多边形

  • 渲染时,分割凸多边形为三角形特别方便,即能快速计算出顶点索引

计算

主要分为三块

  • 多边形分割

  • 线线交点

  • 轴对称

分割

观察触摸方向和多边形各个点的关系。

可以发现,触摸方向触摸方向中点指向多边形顶点 的夹角决定了分割后的多边形的点。

分割
  • 当夹角大于90度时,该顶点正好是折叠多边形的顶点。

  • 当夹角等于90度时,该顶点是两个多边形的顶点。

  • 当夹角小于90度时,该顶点是底部多边形的顶点。

向量间的点积正好可以帮助我们判断夹角问题。

const dotValue = temp_v2_vector.dot(temp_v2_vector_3)
if (Math.abs(dotValue) === 0) {
    // 刚好在点上      
} else if (dotValue > 0) {
    // 在前面  
} else {
    // 在后面
}

交点

当被分割的多边形相邻两点与触摸方向的夹角不同时(属于两个多边形的点),需要计算触摸向量的垂直线与该线段的交点。

交点

直线上的一点可以用点和向量表示。

### 在 Cocos Creator 3.0 中实现文本或精灵的描边效果 #### 使用自定义 Shader 实现描边效果 对于希望在 Cocos Creator 3.0 中为文本或精灵添加描边效果的需求,可以利用自定义Shader来达成这一目标。通过编写特定的着色器代码,能够有效地控制渲染过程中的颜色混合方式,从而创建出理想的描边视觉效果[^3]。 下面是一个简单的例子展示如何构建一个具有描边特性的文字组件: ```glsl // 描边材质脚本 (stroke-material.glsl) precision mediump float; uniform vec4 u_color; uniform sampler2D u_mainTex; varying vec2 v_uv; void main() { // 原始纹理采样 vec4 originalColor = texture2D(u_mainTex, v_uv); // 计算边缘检测因子 float edgeFactor = step(0.5, length(vec2(dFdx(v_uv.x), dFdy(v_uv.y)))); // 应用描边逻辑:当像素位于边界时应用不同的颜色 gl_FragColor = mix(originalColor * u_color, vec4(1., 0., 0., 1.), edgeFactor); } ``` 此片段展示了基本原理,在实际项目中可能还需要调整参数以适应不同场景下的需求。为了使上述代码生效,需将其关联至相应的UI元素上作为其使用的材质资源之一。 另外一种更灵活的方法是借助第三方插件如 Spine 来间接完成类似的任务。虽然 Spine 主要用于骨骼动画制作,但它所提供的挂点机制允许开发者向现有角色模型附加额外的对象,这同样适用于创造独特的装饰性特征,例如围绕对象周围的轮廓线[^2]。 然而值得注意的是,由于版本差异的存在,某些特性可能会有所变化;因此建议查阅官方文档确认最新API接口以及最佳实践指南[^1]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值