首页 > 其他分享 >UnityShaderLab 实现两张图片切换

UnityShaderLab 实现两张图片切换

时间:2024-11-24 19:35:10浏览次数:11  
标签:MainTex val fixed4 UnityShaderLab vertex 两张 切换 Offset SubTex

实现思路:

在顶点着色器中获取物体在世界空间下的某一轴的坐标传递给片元着色器,

o.val = v.vertex.x;

然后在片元着色器中采样两张图片,根据输入的偏移值的更换两张图片的显示。

      fixed4 t1 = tex2D(_MainTex, i.texcoord);
      fixed4 t2 = tex2D(_SubTex, i.texcoord1);
      fixed4 col = t1 * max(0,sign(_Offset - i.val)) + t2 * max(0,sign(i.val - _Offset));

实现效果:

完整代码:

Shader "CustomTex"
{
        Properties {
         _MainTex ("MainTex", 2D) = "white" {}
         _SubTex ("SubTex",2D) = "white"{}
         _Offset("Offset",Range(-10,10)) = 1
     }
 
     SubShader {

         Pass 
         {
             CGPROGRAM
             #pragma vertex vert
             #pragma fragment frag
 
             #include "UnityCG.cginc"
 
             struct appdata_t {
                 float4 vertex : POSITION;
                 float2 texcoord : TEXCOORD0;
                 float2 texcoord1 : TEXCOORD1;
             };
 
             struct v2f {
                 float4 vertex : SV_POSITION;
                 float2 texcoord : TEXCOORD0;
                 float2 texcoord1 : TEXCOORD1;
                 float val : TEXCOORD2;
             };
 
             sampler2D _MainTex;
             uniform float4 _MainTex_ST;
             sampler2D _SubTex;
             uniform float4 _SubTex_ST;
             float _Offset;
             
             v2f vert (appdata_t v)
             {
                 v2f o;
                 o.vertex = UnityObjectToClipPos(v.vertex);
                 o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
                 o.texcoord1 = TRANSFORM_TEX(v.texcoord1, _SubTex);
                 o.val = v.vertex.x;
                 return o;
             }
 
             fixed4 frag (v2f i) : SV_Target
             {
                 fixed4 t1 = tex2D(_MainTex, i.texcoord);
                 fixed4 t2 = tex2D(_SubTex, i.texcoord1);
                 fixed4 col = t1 * max(0,sign(_Offset - i.val)) + t2 * max(0,sign(i.val - _Offset));
                 return col;
             }
             ENDCG 
         }
     }
}

 

标签:MainTex,val,fixed4,UnityShaderLab,vertex,两张,切换,Offset,SubTex
From: https://blog.csdn.net/weixin_50702814/article/details/144007853

相关文章

  • ubuntu切换python默认版本
    1.检查当前Python版本首先,查看系统中已安装的Python版本:python--versionpython3--versionls/usr/bin/python*你应该会看到多个Python版本,如python2.x或python3.x。2.使用update-alternatives工具Ubuntu推荐使用update-alternatives来管理和切换默......
  • Vue3+element-plus 实现中英文切换(Vue-i18n组件的使用)
    1、前言        在Vue3项目中结合 vue-i18n 和 ElementPlus 实现中英文切换是一个常见的需求。下面是一个详细的步骤指南,帮助你完成这个任务。安装引入 1.安装依赖首先,你需要安装 vue-i18n 和 ElementPlus。npminstallvue-i18n@nextelement-plus......
  • Linux操作系统切换设置系统语言
    随着工作环境中变化,我们在使用电脑时,可能要使用不同的系统语言环境,那计算机如何切换成我们需要的系统语言呢,针对Linux操作系统,这里有两种方法。一是通过桌面图形化界面切换,这种方法操作起来直观、但是操作复杂。二是通过终端窗口用命令切换,这种方法操作简便,但是对Linux操作系统......
  • Oracle 11g 之 ADG 主备 Switchover 手动切换实践
    全文目录:开篇语......
  • 【哈工大_操作系统实验】Lab5 基于内核栈切换的进程切换
    本节将更新哈工大《操作系统》课程第五个Lab实验基于内核栈切换的进程切换。按照实验书要求,介绍了非常详细的实验操作流程,并提供了超级无敌详细的代码注释。Linux0.11采用TSS和一条指令完成任务切换,虽然简单但执行时间长。堆栈实现任务切换更快,且可以使用指令流水......
  • QT实现滑动页面切换
    1.界面实现效果以下是具体的项目需要用到的效果展示。2.简介原理:使用Qt的QPropertyAnimation动画类,这里简单来说就是切换两个界面。这个widget里面可以放很多个待切换的界面,每次切换的时候将当前界面和切换后的界面显示,其他界面都隐藏,然后当前界面移动到主界面之外,下一......
  • 宝塔面板切换PHP版本
    可以通过修改当前站点指定的PHP运行版本,合适安装多个PHP版本的用户。支持自定义PHP的连接配置信息来运行,也支持修改该站点为纯静态站点,不通过PHP服务运行。PHP7不支持mysql扩展,默认安装mysqli以及mysql-pdo。Session隔离是指在一个多用户的系统中,为每个用户提供独立的会话环境,使......
  • 进程的调度和切换
    目录1.进程的调度和切换的基本概念2.其他概念3.进程切换的时候,CPU和进程的操作3.1CPU基本概念4.Linux2.6内核进程调度队列1.进程的调度和切换的基本概念进程在CPU上运行的时候,CPU并不会一直运行一个进程,直到进程结束。现代操作系统的进程之间都是根据时间片进行轮转......
  • 界面控件Kendo UI for jQuery 2024 Q3亮点 - 支持切换编辑模式
    随着最新的2024Q3版本,Progress使用户能够使用现成的页面模板和构建块更快地构建令人惊叹的应用程序,使您的Telerik和KendoUI开发体验更好。Telerik和KendoUI 2024Q3版本将焦点放在新推出的页面模板和构建块上,每个页面模板和构建块都预先配置了TelerikUIforBlazor、Kend......
  • JavaScript 网页设计案例 简单的电商案例 页面切换 数据搜索 动态网页
    JavaScript网页设计案例简单的电商案例页面切换数据搜索动态网页1.案例描述以下是一个简单的产品展示网页,用户可以通过点击不同的产品类别按钮来查看相应的产品,且在鼠标悬停时显示产品详情。页面还将包含一个搜索框,用户可以输入关键词来筛选产品。2.文件结构-......