【UnityShader]使用Shader将图片进行水平/竖直镜像翻转

news2024/11/14 18:13:11

一、需求

在开发时从很多地方取出来的图片可能并不是图像原本的模样,可能是被水平或者竖直镜像翻转后的图形,这时候我们要将图片再次镜像回来,只需要一个小小的Shader即可。

二、实现

下面是镜像翻转Shader的思路:

一般来说我们在顶点着色器里面进行纹理的位置坐标变换,

在顶点着色器当中我们需要定义输入和输出的结构体,然后在顶点着色器函数中对输入和输出的关系进行具体的转换:

   struct a2v{
                float4 vertex : POSITION;
                float3 texcoord : TEXCOORD0;
            };
            //顶点输出结构体
            struct v2f{
                float4 pos : SV_POSITION;
                float2 uv : TEXCOORD0; 
            };
            //顶点着色器函数
            v2f vert(a2v v){
                ...
            }

首先我们肯定是要使用UnityObjectToClipPos方法将顶点的位置转换为裁剪空间坐标。

裁剪空间坐标即UV坐标,UV的x和y的范围都是0-1;

对于水平镜像:y不变,处理后坐标.x=1-原坐标.x;

对于竖直镜像:x不变,处理后的坐标y=1-原坐标y;

 //顶点着色器函数
            v2f vert(a2v v){
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);//将顶点位置转换为裁剪空间位置
 
                o.uv = v.texcoord;//传递纹理坐标
                if(_MirrorU>0){
                    o.uv.x = 1 - o.uv.x;//水平翻转纹理坐标,UV的范围都是(0,1),y不变,水平镜像后的坐标.x=1-原坐标.x
                }
                if(_MirrorV>0){
                    o.uv.y = 1 - o.uv.y;//竖直镜像时,x不变,镜像后坐标.y=1-镜像前坐标.y
                }
 
                return o;
            }

最后我们再在片元着色器函数中从主纹理采样并返回颜色,

这样一个简单的镜像翻转shader就完成了。

三、demo:

资源Demo下载链接​​​​​​​

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

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

相关文章

C++奇迹之旅:从0开始实现日期时间计算器

文章目录 📝前言🌠 头文件Date.h🌉日期计算函数🌠前后置🌉前后置-- 🌠两对象日期相减🌉自定义流输入和输出 🌉 代码🌉 头文件Date.h🌠Date.cpp🌉 …

ECALL介绍

一、ECALL关键词介绍 ECALL:Emergency Call,紧急呼叫 PSTN:Public Switched Telephone Network MSD:Minimum Set of Data PLMN: Public Land Mobile Network PASP:Public Safety Answering Point IVS: in-vehicle system(车载系统)是内部的调制解调器,以全双工的方式…

【漏洞复现】手机卡号推广商城 login.php接口处存在 SQL 注入漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

STM32应用开发教程进阶--UART串口重定向(printf)

实现目标 1、掌握STM32 HAL库的串口重定向 2、具体目标:1、实现printf “打印”各种常用的类型的数据变量 一、串口“打印” UART串口通信协议是我们常用的通信协议(UART、I2C、SPI等)之一,全称叫做通用异步收发传输器&#xf…

卷积神经网络CNN入门

卷积神经网络应用领域 因为卷积神经网络主要应用场景就是计算机视觉任务,因此有必要简单介绍一下CV领域发展情况: 可以发现,在 ImageNet 图像数据集中分析图像的错误率十年间已经被深度学习给降低到了比人类(HuMan)识…

阿里云短信渠道专属优惠价格,全网最便宜入口

阿里云短信渠道专属优惠,1000条短信30元、2000条短信优惠价格60元、3000元短信套餐包价格90元、5000短信优惠150元,活动页面 aliyunbaike.com/go/duanxin 链接打开如下图: 阿里云短信渠道专属优惠价格 阿里云短信支持国内快速发送验证码、通…

算法——BFS算法

1. 什么是BFS算法 BFS(广度优先搜索,Breadth-First Search)算法是一种用于图和树等数据结构中进行搜索的基本算法。它从指定的起始节点开始,逐层地向外扩展搜索,直到找到目标节点或遍历完整个图。 BFS算法的基本思想是…

R可视化:桑基图展示数据层流动

介绍 以桑基图形式展示数据分布情况 加载R包 knitr::opts_chunk$set(message = FALSE, warning = FALSE) library(tidyverse) library(ggalluvial)# rm(list = ls()) options(stringsAsFactors = F) options(future.globals.maxSize = 10000 * 1024^2) 导入数据 metadata…

【Qt 学习笔记】Qt常用控件 | 显示类控件 | Label的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 显示类控件 | Label的使用及说明 文章编号:Q…

CentOS 系统的优缺点

CentOS (社区企业操作系统的缩写)是一个基于红帽企业 Linux (RHEL)的免费开源发行版, 旨在为服务器和工作站提供稳定、可靠和安全的平台。 不应将其与CentOS Stream 混淆,后者是即将发布的 RHEL 版本的上游开发平台。 CentOS Li…

虚拟化及Docker基础

一、虚拟化 1.1 云端 1.2 云计算服务模式分层 1.3 虚拟化架构 1.3.1 寄居架构 1.3.2 原生架构 1.4 虚拟化产品 1.4.1 仿真虚拟化产品(对系统硬件没有要求,性能最低) 1.4.2 半虚拟化 (虚拟机可以使用真机物理机&#xff09…

垃圾渗滤液如何有效处理

垃圾渗滤液,通常称为垃圾填埋场的渗滤液,是一种复杂的高浓度有机废水,含有多种有毒有害物质。有效处理垃圾渗滤液对环境保护至关重要。这里是一些常见且有效的处理方法: ### 预处理 ##### 1. 调节池 - **pH调整**:通过…

【招聘】数通,云计算岗位持续招聘中

北京、南京、成都、贵州、杭州、深圳、上海 云计算HCS 薪资:8-25k 岗位描述: 1、制定网络安全技术规范及工作标准、负责全国工程团队技术培训及人员培养 2、全国项目技术支持、协助开展广域网的设计、规划、实施及方案交流工作 3、承担公司中、大型集成项目管理,负…

7、线上系统部署时如何设置JVM内存大小?

7.1、前文回顾 让我们先来回顾一下我们已经学到的知识。现在,大家应该都明白了,在我们日常编写代码时,所创建的对象通常是首先在新生代区域进行分配的。然后,当一些方法执行完毕后,大部分位于新生代区域中的对象将不再被引用,从而变成垃圾对象。如下图所示: 随着程序…

Spring MVC后续

目录 1 响应 1.1 返回静态页面 1.2 返回数据ResponseBody 1.3 返回HTML代码片段 1.4 返回JSON 1.5 设置状态码 1 响应 1.1 返回静态页面 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>index页面&…

项目管理中,项目团队如何高效的协作与沟通?

目 录 一、项目团队高效的协作与沟通&#xff0c;可以通过以下几个方面来实现&#xff1a; 二、如何在项目团队中明确和共享愿景以提高协作效率&#xff1f; 三、有效的沟通策略在项目管理中的应用案例有哪些&#xff1f; 四、建立哪些具体的沟通机制可以提升团队协作效率…

创享大会分会场—“职棱起来”《职业生涯画布工作坊》

会议主题&#xff1a;创享大会分会场—“职棱起来”《职业生涯画布工作坊》 会议时间&#xff1a;5月25日&#xff08;周六&#xff09;13:30—16:30 会议地点&#xff1a;北京希尔顿欢朋酒店&#xff08;大红门&#xff09; 特邀嘉宾&#xff1a;姚冬&#xff08;冬哥&…

探秘Meta AI巨无霸:LLaMA大语言模型解析!

目录 福利&#xff1a;文末有chat-gpt纯分享&#xff0c;无魔法&#xff0c;无限制 Abstract Introduction Approach Pre-training Data Tokenizer Architecture Pre-normalization SwiGLU激活函数 Rotary Embeddings Optimizer Main results 总结 Meta的LLaMA大模…

【QML】State组件

State(状态)组件是一组来自默认配置的批处理更改。所有项都有一个默认状态&#xff0c;该状态定义对象和属性值的默认配置。可以通过将State项添加到states属性来定义新的状态&#xff0c;以允许项在不同的配置之间切换。 State组件的基本用法如下&#xff1a; Window {id: …

如何优化必应bing搜索国内广告投放效果?

在当今竞争激烈的数字营销环境中&#xff0c;必应Bing作为全球第二大搜索引擎&#xff0c;在中国市场正逐渐成为企业不可忽视的广告投放平台。其高质量的用户基础与精准的定位能力&#xff0c;为广告主提供了新的增长机遇。然而&#xff0c;如何在必应Bing上实现广告效果的最大…