当前位置: 首页 > news >正文

Unity中Shader的屏幕坐标

文章目录

  • 前言
  • 一、屏幕坐标
    • 1、屏幕像素的坐标
    • 2、屏幕坐标归一化
  • 二、在Unity中获取 当前屏幕像素 和 总像素
    • 1、获取屏幕总像素,使用_ScreenParams参数
    • 2、获取当前片段上的像素
      • 怎么使用:在片元着色器传入参数时使用


前言

Unity中Shader的屏幕坐标


一、屏幕坐标

1、屏幕像素的坐标

请添加图片描述

2、屏幕坐标归一化

使用公式: 屏幕归一化坐标 = 当前像素 / 总像素

请添加图片描述


二、在Unity中获取 当前屏幕像素 和 总像素

1、获取屏幕总像素,使用_ScreenParams参数

_ScreenParams
屏幕的相关参数,单位为像素。
x表示屏幕的宽度
y表示屏幕的高度
z表示1+1/屏幕宽度
w表示1+1/屏幕高度

2、获取当前片段上的像素

UNITY_VPOS_TYPE screenPos : VPOS
1.当前片断在屏幕上的位置(单位是像素,可除以_ScreenParams.xy来做归一化),此功能仅支持#pragma target 3.0及以上编译指令
2.大部分平台下VPOS返回的是一个四维向量,部分平台是二维向量,所以需要用UNITY_VPOS_TYPE来统一区分.
3.在使用VPOS时,就不能在v2f中定义SV_POSITION,这样会冲突,所以需要把顶点着色器的输入放在()的参数中,并且SV_POSITION添加out.

怎么使用:在片元着色器传入参数时使用

fixed4 frag (v2f i,UNITY_VPOS_TYPE screenPos : VPOS) : SV_Target
{
}

VPOS这个类型因为在不同平台不统一,有的是 float2 有的是 float4 ,所以使用Unity提供的类型 UNITY_VPOS_TYPE,让Unity自动处理

当使用UNITY_VPOS_TYPE screenPos : VPOS作为片元着色器的输入时,需要对顶点着色器的输入做出修改

修改后代码:

Shader "MyShader/P0_10_2"
{SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"sampler2D _MainTex;float4 _MainTex_ST;struct appdata{float4 vertex : POSITION;};struct v2f{float2 uv : TEXCOORD0;};//在顶点着色器的输入处,不用appdata,直接使用用到的参数,防止 SV_POSITION 重复定义v2f vert (float4 vertex : POSITION,out float4 pos : SV_POSITION){v2f o;pos = UnityObjectToClipPos(vertex);return o;}fixed4 frag (v2f i,UNITY_VPOS_TYPE screenPos : VPOS) : SV_Target{float2 screenUV = screenPos.xy / _ScreenParams.xy;return fixed4(screenUV,0,0);}ENDCG}}
}

效果:
在这里插入图片描述

输出屏幕归一化的x的效果:return screenUV.x;

在这里插入图片描述

输出屏幕归一化的y的效果:return screenUV.y;

在这里插入图片描述

http://www.lryc.cn/news/158444.html

相关文章:

  • springboot MongoDB 主从 多数据源
  • 【100天精通Python】Day57:Python 数据分析_Pandas数据描述性统计,分组聚合,数据透视表和相关性分析
  • Unity 切换场景后场景变暗
  • RabbitMQ学习笔记
  • 【C# Programming】类、构造器、静态成员
  • 软件层面缓存基本概念与分类
  • 单片机有哪些分类?
  • 高阶数据结构-----三种平衡树的实现以及原理(未完成)
  • 北斗高精度组合导航终端
  • 低代码平台是否能替代电子表格?
  • qt多个信号如何关联一并处理
  • 【python爬虫】12.建立你的爬虫大军
  • 2023数学建模国赛C题思路--蔬菜类商品的自动定价与补货决策
  • vue2与vue3的使用区别
  • Apache httpd漏洞复现
  • 【漏洞复现】时空智友企业流程化管控系统文件上传
  • elasticsearch的DSL查询文档
  • IP地址、子网掩码、网络地址、广播地址、IP网段
  • ffmpeg-android studio创建jni项目
  • 智慧公厕是将数据、技术、业务深度融合的公共厕所敏捷化“操作系统”
  • JVM中JAVA对象和数组内存布局
  • 【2023年数学建模国赛】赛题发布
  • Java HashMap源码学习
  • Gin中用于追踪用户的状态的方法?!!!
  • HTTP代理与HTTPS代理在工作流程上有哪些区别
  • Docker从认识到实践再到底层原理(二-2)|Namespace+cgroups
  • 算法的概述
  • 菜鸟教程《Python 3 教程》笔记(19):错误与异常
  • 空气净化器上亚马逊美国站需要办理什么认证?空气净化器UL867测试报告如何办理?
  • SpringBoot的测试方案