简易画笔效果

news2024/11/23 23:46:36

在这里插入图片描述
使用代码创建纯白图片,图片大小要与image组件大小相同
使用OnDrag触摸的时候将触摸点周围的像素都改为透明
使用shader判断两张图,只要有一张图像素点透明的地方就都透明
shader代码

Shader "Hidden/Draw"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _DrawTex ("drawtex", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType" = "Transparent" }
        Blend SrcAlpha OneMinusSrcAlpha
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = v.uv;
                return o;
            }

            sampler2D _MainTex;
            sampler2D _DrawTex;

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, i.uv);
                fixed4 drawcol = tex2D(_DrawTex, i.uv);
                col.a = drawcol.a == 0 ? 0 : col.a;
                // just invert the colors
                return col;
            }
            ENDCG
        }
    }
}

脚本代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class Drawonimage : MonoBehaviour,IDragHandler
{
    public Texture tu;
    public int r = 5;
    Texture2D texture;
    Vector2 wh;
    public void OnDrag(PointerEventData eventData)
    {
        Vector3 pos = transform.InverseTransformPoint(eventData.position);
        Debug.Log(pos);
        Vector2Int v2 = new Vector2Int((int)(pos.x + wh.x / 2), (int)(pos.y + wh.y / 2));
        int wbegin = v2.x - r;
        wbegin = wbegin > 0 ? wbegin : 0;
        int wend = v2.x + r;
        wend = wend < (int)wh.x ? wend : (int)wh.x;
        int hbegin = v2.y - r;
        hbegin = hbegin > 0 ? hbegin : 0;
        int hend = v2.y + r;
        hend = hend < (int)wh.y ? hend : (int)wh.y;

        for (int x = wbegin; x < wend; x++)
        {
            for (int y = hbegin; y < hend; y++)
            {
                if (Vector2.Distance(v2,new Vector2(x,y)) <= r)
                {
                    texture.SetPixel(x, y, new Color(1, 1, 1, 0));
                }
            }
        }
        texture.Apply();
    }

    // Start is called before the first frame update
    void Start()
    {
        wh = GetComponent<RectTransform>().sizeDelta;
        texture = new Texture2D((int)wh.x, (int)wh.y);
        for (int x = 0; x < wh.x; x++)
        {
            for (int y = 0; y < wh.y; y++)
            {
                texture.SetPixel(x, y, Color.white);
            }
        }
        texture.Apply();
        Material material = new Material(Shader.Find("Hidden/Draw"));
        material.SetTexture("_MainTex", tu);
        material.SetTexture("_DrawTex", texture);
        GetComponent<Image>().material = material;
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

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

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

相关文章

少儿编程 中国电子学会图形化编程等级考试Scratch编程二级真题解析(判断题)2023年3月

2023年3月scratch编程等级考试二级真题 判断题(共10题,每题2分,共20分) 26、执行完这段程序后,可以在舞台上画出一个正方形 答案:错 考点分析:考查积木综合使用,重点考查画笔积木的使用,从程序中可以看出落笔是在最后,所以在落笔之前绘制的图形是不会显示出来,没…

机器学习服务语音合成,解锁智能养娃新趋势

从翻阅图书绘本到捧着电子书&#xff0c;再到点开手机里的音频APP&#xff0c;随着“互联网阅读”的逐步深入&#xff0c;儿童有声读物越来越受95后父母的欢迎&#xff0c;它的出现令年轻父母摆脱了为孩子讲故事的辛苦&#xff0c;而且有声读物配音发音更加标准&#xff0c;有助…

每日学术速递5.15

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CL 1.Not All Languages Are Created Equal in LLMs: Improving Multilingual Capability by Cross-Lingual-Thought Prompting 标题&#xff1a;并非所有语言在 LLM 中都是平等的&#…

直流电机 PID 控制系统仿真研究(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

openGauss数据库3.0.0升级5.0.0操作实践

文章目录 1.1 前言1.2 升级须知升级流程升级方式升级约束 1.3 升级前准备1.4 升级操作1.5 升级验证1.6 提交升级 1.1 前言 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。之前基于3.0.0版本进行了一些实践&#xff0c;本篇就详细介绍如何将o…

Win7/Win10/Win11系统怎么显示文件后缀

在不同版本的Windows系统中&#xff0c;如Win7/Win10/Win11&#xff0c;显示文件的后缀名可能会有所不同。为了方便用户在进行文件管理时更加方便和高效&#xff0c;本文整理了Win7/Win10/Win11系统中显示文件后缀的具体方法&#xff0c;希望能帮助大家更加轻松地管理自己的文件…

展会进行时!5月16-18日箱讯与您相约中国航交会

宁波国际会展中心7、8号馆 第五届中国&#xff08;宁波&#xff09;国际航运物流交易会 暨2023全球物流企业合作博览会 火爆进行中 箱讯与您相约 8号馆 C033K-C036展位 期待您的光临&#xff01; 2023年5月16-18日&#xff0c;第五届中国&#xff08;宁波&#xff09;国际…

Grafana系列-统一展示-11-Logs Traces无缝跳转

系列文章 Grafana 系列文章 概述 如前文 Grafana 系列 - 统一展示 -1- 开篇所述, Grafana 可以了解所有相关的数据--以及它们之间的关系--对于尽快根治事件和确定意外系统行为的真正来源非常重要。Grafana 允许团队在一个地方对所有的数据进行无缝的可视化和跳转。 最典型的…

MySQL8.0 优化器介绍(四)

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a; 奥特曼爱小怪兽文章来源&#xff1a;GreatSQL社区原创 往期回顾 MySQL8.0 优化器介绍&#xff08;一&#x…

Midjourney|文心一格prompt教程[基础篇]:注册使用教程、风格设置、参数介绍、隐私模式等

Midjourney|文心一格prompt教程[基础篇]&#xff1a;注册使用教程、风格设置、参数介绍、隐私模式等 开头讲一下为什么选择Midjourney和文心一格&#xff0c;首先Midjourney功能效果好不多阐述&#xff1b;其次文心一格再多次迭代优化后效果也不错&#xff0c;重点也免费&…

【Kubernetes】| K8s基础组件分析

目录 一. &#x1f981; 前言二. &#x1f981; K8s vs Docker三. &#x1f981; K8s基础组件3.1 Master组件3.1.1 api server3.1.2 controller manager3.1.3 scheduler3.1.4 etcd 3.2 Node组件3.2.1 kublet3.2.2 kube-proxy 四. &#x1f981; 最后 一. &#x1f981; 前言 Ku…

antd-vue-admin——通过链接跳过登录页直接进入系统内部——基础积累

最近在写后台管理系统&#xff0c;遇到一个需求&#xff0c;就是从系统A带参数可以直接进入到系统B内部。不通过系统B的登录页面进行登录。 一般系统的登录&#xff0c;都需要用户名和密码等参数&#xff0c;然后获取到token信息&#xff0c;最后进入到系统内部。 下面介绍具…

5-16SQL每日一题

如下两张表&#xff0c;G0516A和G0516B 要求G0516B按顺序与G0516A的第一个WEEK1依次有序的组合&#xff0c;直到依次组合完毕&#xff0c;预计结果如下&#xff1a; 测试数据&#xff1a; CREATE TABLE G0516A ( WEEKS VARCHAR(10) ) INSERT INTO G0516A VALUES (‘WEEK1…

Socket请求和Http请求区别和场景

我们在开发过程中遇到http请求和socket请求。大部分前后交互都是通过http请求的方式&#xff0c;那socket请求怎么使用&#xff0c;什么情况下使用呢&#xff1f; 基本概念 http请求&#xff1a;基于http协议的soap协议&#xff0c;常见的http数据请求方式有get和post&#xf…

OpenCV实现图像的缩放几何变换,图像金字塔,高斯不同

1.前言 实现图像的放大&#xff08;zoom in&#xff09;和缩小&#xff08;zoom out&#xff09;主要通过两种途径&#xff1a; 几何变换。图像金字塔。 2.几何变换 通过几何变换实现图像放大和缩小功能主要是通过OpenCV的resize函数&#xff1a; 1 2 3 4 5 6 7 8void resi…

二.深度学习yolov5 比特家异构计算 训练与转模型01

(备份笔记 仅记录) 走国产化路上 要离开老黄的NVIDIA了&#xff0c;现在摸索下比特家的异构计算 yolo还停在v3的阶段 因为之前v3就已经够产品化去用了。这次也走下yolov5吧&#xff01; 1.yolov5环境搭建 2.yolov5模型训练 3.yolov5模型测试 4.模型做truck 5.模型转换为…

【六袆 - Design Pattern】Strategy Pattern;策略模式;

JDK8源码使用的策略模式列举 java.util.comparator接口用于对对象进行排序。Comparator接口的compare()方法将两个对象作为参数&#xff0c;并返回一个整数值&#xff0c;表示这两个对象的相对顺序。比较器接口有许多不同的实现&#xff0c;每个实现都有不同的排序算法。例如&a…

OpenPCDet系列 | 5.4 PointPillars算法——AnchorHeadSingle模型预测头模块

文章目录 AnchorHeadTemplate模块1. AnchorGenerator2. ResidualCoder3. AxisAlignedTargetAssigner AnchorHeadSingle模块1. AnchorHeadSingle初始化2. AnchorHeadSingle训练前向传播3. AnchorHeadSingle测试前向传播 OpenPCDet的整个结构图&#xff1a; PointPillars算法属…

人人可用的开源数据可视化分析工具

大家好&#xff0c;我是互联网架构师&#xff01; 在互联网数据大爆炸的这几年&#xff0c;各类数据处理、数据可视化的需求使得 GitHub 上诞生了一大批高质量的 BI 工具。 借助这些 BI 工具&#xff0c;我们能够大幅提升数据分析效率、生成更高质量的项目报告&#xff0c;让用…

UE4/5中DataTable数据表的使用

我们在UE中经常要对配置数据进行编辑&#xff0c;用好UE自己的DataTable自然对日常使用有所帮助。 1.蓝图使用流程 1.1 DataTable创建 使用数据表首先得创建自定义结构体&#xff0c;这样才好定义每一行的格式&#xff0c;例如这里创建如下&#xff1a; 然后右键选择创建Da…