先上效果图:

接下来是参数控制面板:

再接下来是代码:

Shader "Unlit/UV_R_S_T"
{Properties{_MainTex ("Texture", 2D) = "white" {}[Toggle(OpenScale)]_OpenScale("OpenScale",float)=0_Scale("Scale",Range(0,10)) = 1[Toggle(OpenRotate)]_OpenRotate("OpenScale",float)=0_Rotate("Rotate",float) = 0[Toggle(OpenOffset)]_OpenOffset("OpenOffset",float)=0_Offset("Offset",float) =(0,0,0,0)}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{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;};sampler2D _MainTex;float4 _MainTex_ST;float _OpenScale;float _Scale;float _OpenRotate;float _Rotate;float _OpenOffset;float4 _Offset;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _MainTex);return o;}fixed4 frag (v2f i) : SV_Target{float2 newUV = i.uv;if(_OpenScale){newUV -= float2(0.5,0.5);newUV *= _Scale;newUV += float2(0.5,0.5);}if(_OpenRotate){float angle = _Rotate*0.017453292519943295;newUV -= float2(0.5,0.5);newUV = float2(newUV.x*cos(angle)-newUV.y*sin(angle),newUV.y*cos(angle) + newUV.x*sin(angle));newUV += float2(0.5,0.5);}if(_OpenOffset)newUV += _Offset.xy;fixed4 col = tex2D(_MainTex, newUV);return col;}ENDCG}}
}

技术难点在于如何让UV至于中心点并且可以旋转,缩放.

需要先把  uv -= float2(0.5,0.5);  UV的中心点移动到中间 然后在此基础上做旋转,缩放等操作后再把 uv += float2(0.5,0.5);   表面看上去先减0.5 然后再加0.5像是什么也没有做 但是在+0.5之前进行过的操作就会被记录在uv里 然后在操作后的基础上把UV再加回去一半就可以实现中心点操作了.(0.5代表的是UV一半 因为UV本身是0-1的映射)

如果有不明白的可以把工程下载下来查看!

https://download.csdn.net/download/haseef520s/20680741

Unity UV基于中心点旋转/缩放/位移 Shader相关推荐

  1. unity 3D模型展示旋转缩放

    目标: 在UI层上 自由观察3D 模型,实现鼠标控制模型的旋转,缩放&& 触摸屏手势控制模型的旋转缩放控制: 这里仅将控制代码挂载到相机上,通过对相机的控制来观察模型. 基本上为最小单 ...

  2. 偏移shaderuv_Unity Shader UV平移、旋转、缩放效果

    平移.旋转.缩放.扭曲这几个效果在很多游戏场景中都会运用到,本篇文章就给大家分享下在Unity中基于Shader实现UV平移.旋转.缩放效果. 平移效果: 旋转: 缩放: 扭曲效果: shader代码 ...

  3. 计算机图形学【GAMES-101】1、矩阵变换原理Transform(旋转、位移、缩放、正交投影、透视投影)

    快速跳转: 1.矩阵变换原理Transform(旋转.位移.缩放.正交投影.透视投影) 2.光栅化(反走样.傅里叶变换.卷积) 3.着色计算(深度缓存.着色模型.着色频率) 4.纹理映射(重心坐标插值 ...

  4. Unity 触屏手势控制Camera平移旋转缩放

    Unity 触屏手势控制Camera平移旋转缩放 实现思路 单点触屏,位移增量控制相机平移: 两点触屏,两点位移控制相机前后移动(缩放):两点中一点不位移控制相机绕点旋转: 实现需要的API Touc ...

  5. 数字图像处理(五)几何变换之图像平移、镜像、绕中心点旋转、缩放等

    本文为参考这位https://blog.csdn.net/eastmount/article/details/46345299所做的一些笔记,文字部分复制粘贴,代码部分有所改进,增加了绕中心点旋转等 ...

  6. 4-3 缩放 位移 旋转 矩阵

    目录 前言 一 .位移矩阵 二.移动矩阵 三.旋转矩阵 四.矩阵的组合 前言 矩阵就是基底 一般列向量都是有一个"单位基底" 矩阵:缩放/位移/旋转-矩阵 4.上一章学习了单位矩阵 ...

  7. Unity 相机围绕目标旋转、缩放功能实现

    Unity 相机围绕目标旋转.缩放功能实现 //************************************************相机围绕物体旋转.相机缩放*************** ...

  8. 计算机图形学一:基础变换矩阵总结(缩放,旋转,位移)

    变换矩阵总结 摘要 1 2D线性变换 1.1 缩放(scaling) 1.2 剪切(shearing) 1.3 旋转(rotation) 2 3D线性变换 2.1 3维缩放(scaling),剪切(s ...

  9. 案例学习——Unity基于体绘制的大气散射shader

    本案例学习资料来源 Volumetric Atmospheric Scattering 案例学习--Unity基于体绘制的大气散射shader 0 效果展示 1 引入 1.0 介绍 1.1 单次散射( ...

最新文章

  1. Harbor Docker 镜像仓库搭建
  2. com/android/dx/command/dexer/Main : Unsupported major.minor version 52.0
  3. java虚拟机指令初步学习
  4. 打包跳过编译_Apache Flink v1.9-SNAPSHOT 源码编译
  5. 静态初始化块的执行顺序
  6. multiple versions of scala libraries detected解决方案
  7. 精品 IDEA 插件大汇总!值得收藏
  8. pycharm 如何自动添加头注释,比如时间,作者信息等
  9. java编写一个移动物体_java编写一个可以上下移动的小球:运行后,可以通过上下左右键进行移动...
  10. PHP函数的引用传递(地址传递)
  11. java流程图表示输入 输出_流程图 - 迷途行者 - 博客园
  12. Python 随机生成 范围内(周围) 经纬度 坐标信息
  13. [LuoguP3503]「BZOJ2086」[POI2010] Blocks
  14. js中的四种常用数组排序方法(冒泡、选择、插入、快排)及sort排序
  15. 爬虫第3课 -豆瓣TOP250电影爬取
  16. b哩b哩视频弹幕爬虫程序(python)
  17. 小白必看:IT转行需要注意什么,这几个问题很重要
  18. 青少年编程平台系统设计与实现
  19. sql面试题——手写sql练习案例(一)
  20. 大数据真的很牛B吗?不不不,10分钟让你读懂它

热门文章

  1. 07 仿网易严选微信小程序商城
  2. 晋升PPT这样写,帮你提高晋升概率
  3. 河南理工大学matlab,有没有会MATLAB的大神
  4. HyperLynx(十五)多板仿真
  5. Android 微信支付加密
  6. 牛顿法和高斯牛顿法对比
  7. 怎么识别手写的文字?办公常备软件说明
  8. 运放输入偏置电流方向_运放参数的详细解释和分析-part1,输入偏置电流和输入失调电流【TI FAE 分享】...
  9. c++ 隐藏和显示标题栏
  10. 2022.7.2新版码易支付源码+三网免签挂+APP监控在线更新