首页 > 其他分享 >多边形裁剪图片

多边形裁剪图片

时间:2023-07-25 23:36:17浏览次数:45  
标签:uv 多边形 float Image 裁剪 vh imageRect image 图片

效果

 

using UnityEngine;
using UnityEngine.Sprites;
using UnityEngine.UI;

[RequireComponent(typeof(Image))]
public class PolygonMeshEffect : BaseMeshEffect
{

    [SerializeField]
    [Range(3, 60)]
    private int m_SegmentCount = 3;

    public int segmentCount { get { return m_SegmentCount; } }

    private Image m_Image;

    public Image image
    {
        get
        {
            if (null == m_Image)
                m_Image = GetComponent<Image>();
            return m_Image;
        }
    }

    public override void ModifyMesh(VertexHelper vh)
    {
        if (!enabled) return;
        if (null == image) return;
        if (image.type != Image.Type.Simple) return;

        var sp = image.sprite;
        var color = image.color;

        vh.Clear();

        var imageRect = image.GetPixelAdjustedRect(); //左下角为pivot的坐标
        var vertCenter = new Vector3(imageRect.x + imageRect.width * 0.5f, imageRect.y + imageRect.height * 0.5f);

        float radius = (imageRect.width > imageRect.height) ? imageRect.height * 0.5f : imageRect.width * 0.5f; //使用短的边作为半径
        var uv = (null != sp) ? DataUtility.GetOuterUV(sp) : Vector4.zero;
        var uvCenter = new Vector2((uv.x + uv.z) * 0.5f, (uv.y + uv.w) * 0.5f);

        float sx = (uv.z - uv.x) / imageRect.width;
        float sy = (uv.w - uv.y) / imageRect.height;

        float radianPerSegment = 2 * Mathf.PI / m_SegmentCount;

        vh.AddVert(vertCenter, color, uvCenter);

        Vector3 tempVert = vertCenter;
        Vector2 tempUv = uvCenter;
        float tempRadian = 0;
        for (int i = 0; i < m_SegmentCount; ++i)
        {
            float dx = Mathf.Cos(tempRadian) * radius;
            float dy = Mathf.Sin(tempRadian) * radius;

            tempVert.x = vertCenter.x + dx;
            tempVert.y = vertCenter.y + dy;

            tempUv.x = uvCenter.x + dx * sx;
            tempUv.y = uvCenter.y + dy * sy;

            vh.AddVert(tempVert, color, tempUv);
            tempRadian += radianPerSegment;
        }

        for (int i = 1; i < m_SegmentCount; ++i)
        {
            vh.AddTriangle(0, i + 1, i); //顺时针, SceneView的wireframe才能正确显示
        }
        vh.AddTriangle(0, 1, m_SegmentCount); //首尾相连
    }

}

 

参考

[Unity UGUI] 制作圆形图片的两种方式 - 知乎 (zhihu.com)

 

标签:uv,多边形,float,Image,裁剪,vh,imageRect,image,图片
From: https://www.cnblogs.com/sailJs/p/17531459.html

相关文章

  • python 根据文字生成图片
    使用Python生成图片导言在这篇文章中,我将向您展示如何使用Python根据文字生成图片。这个过程可以通过以下几个步骤实现:创建一个空白图片;添加文字到图片中;设置图片的样式,如字体、颜色和大小;保存生成的图片。现在,让我们一步一步地来实现这个过程。步骤下面的表格展示了整......
  • python3 全景图裁剪
    需求:1、将鱼眼全景图转换为three.js可加载的六面立方体图片 资料查阅:1、目前就找到这个地方有、可能是为父搜索的姿势不对-->前往2、图片包含内容 使用到的python库:1、numpy---太大,这里用于处理图像矩阵变形,计算。2、cv2 --太大,只用到了图像映射(将原始图像......
  • 完美解决fabirc中对图片进行拉伸等比缩放。
    最近写公司项目遇到了这个fabirc这个库,第一次使用这个库可谓是遇到了很多麻烦,不过还好经过多天熬夜奋斗才勉强熟练使用这个库,今天小编初略的说一下怎么对图片进行等比缩放。话不多说直接看代码注释letthat=this;//创建图片画布fabric.Image.fromURL(......
  • Vue使用v-viewer插件实现图片预览和缩放和旋转等功能
    科普:v-viewer简单来说:v-viewer是一款支持vue项目中的图片浏览组件,它支持图片旋转、缩放、翻转等操作,支持配置化.非常强大官网目录:v-viewer安装依赖直接执行命令:npminstallv-viewer--save引入并使用依赖下载完成之后,就可以配置了,具体操作就是引入并使用依赖了。找到vu......
  • 生成图片url地址 python
    生成图片URL地址的Python实现步骤作为一名经验丰富的开发者,我将教你如何使用Python来生成图片URL地址。下面是整个流程的步骤。步骤概览步骤描述1导入必要的库2定义图片文件路径3生成URL地址4输出URL地址现在我们将逐步进行说明,教你每一步需要做什么,......
  • Unity 生成多边形最简单的方法
    按照正常的思维,先将多边形进行三角剖分,生成网格,再添加碰撞器,去实现业务逻辑多边形三角化是件麻烦事,还需要考虑多边形的凹凸性,有没有洞等其实可以反其道而行,先添加碰撞器,通过碰撞器生成mesh,代码比较简单,直接上代码usingSystem.Collections;usingSystem.Collections.Generic;......
  • Unity UGUI的RawImage(原始图片)组件的介绍及使用
    UnityUGUI的RawImage(原始图片)组件的介绍及使用1.什么是RawImage组件?RawImage是UnityUGUI中的一个组件,用于显示原始图片。与Image组件不同,RawImage可以直接显示原始图片的像素数据,而不需要经过额外的处理。2.RawImage组件的工作原理RawImage组件通过将原始图片的像素数据直......
  • 利用Nginx http_image_filter_module模块来裁剪过大的图片
    http_image_filter_module是nginx提供的集成图片处理模块,支持nginx-0.7.54以后的版本,在网站访问量不是很高磁盘有限不想生成多余的图片文件的前提下可,就可以用它实时缩放图片,旋转图片,验证图片有效性以及获取图片宽高以及图片类型信息,由于是即时计算的结果,所以网站访问量大的话,不建......
  • xhEditor实现word图片自动转存
    ​ ueditor粘贴不能粘贴word中的图片是一个很头疼的问题,在我们的业务场景中客户要求必须使用ueditor并且支持word的图片粘贴,因为这个需求头疼了半个月,因为前端方面因为安全的原因是不允许访问本地文件的。首先说一下,ueditor粘贴word图片的问题已经解决,但是不是纯web方法解决的,......
  • 售楼部酒店会所家装不锈钢储物柜图片 入户玄关拉丝钛金不锈钢装饰柜
    售楼部酒店会所家装不锈钢储物柜图片入户玄关玫瑰金不锈钢装饰柜......