当前位置: 首页 > 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;

在这里插入图片描述

相关文章:

Unity中Shader的屏幕坐标

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

springboot MongoDB 主从 多数据源

上一篇,我写了关于用一个map管理mongodb多个数据源(每个数据源,只有单例)的内容。 springboot mongodb 配置多数据源 临到部署到阿里云的测试环境,发现还需要考虑一下主从的问题,阿里云买的数据库&#x…...

【100天精通Python】Day57:Python 数据分析_Pandas数据描述性统计,分组聚合,数据透视表和相关性分析

目录 1 描述性统计(Descriptive Statistics) 2 数据分组和聚合 3 数据透视表 4 相关性分析 1 描述性统计(Descriptive Statistics) 描述性统计是一种用于汇总和理解数据集的方法,它提供了关于数据分布、集中趋势和…...

Unity 切换场景后场景变暗

问题 Unity版本:2019.4.34f1c1 主场景只有UI,没有灯光,天空盒;其他场景有灯光和天空盒所有场景不烘焙主场景作为启动场景运行,切换到其他场景,场景变暗某一个场景作为启动场景运行,光影效果正…...

RabbitMQ学习笔记

1、什么是MQ? MQ全称message queue(消息队列),本质是一个队列,FIFO先进先出,是消息传送过程中保存消息的容器,多 用于分布式系统之间进行通信。 在互联网架构中,MQ是一种非常常见的…...

【C# Programming】类、构造器、静态成员

一、类 1、类的概念 类是现实世界概念的抽象:封装、继承、多态数据成员: 类中存储数据的变量成员方法: 类中操纵数据成员的函数称为成员方法对象:类的实例类定义 class X {…} var instance new X(…); 2、实例字段 C#中…...

软件层面缓存基本概念与分类

缓存 缓存基本概念(百度百科) 缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快…...

单片机有哪些分类?

单片机有哪些分类? 1.AVR单片机-----速度快,一个时钟周期执行一条指令,而普通的51单片机需要12个时钟周期执行一条指令。当然,Atmel公司出品的AT89LP系列单片机也是一个时钟执行一条指令,但目前还未普及。AVR单片机比51单片机多…...

高阶数据结构-----三种平衡树的实现以及原理(未完成)

TreeMap和TreeSet的底层实现原理就是红黑树 一)AVL树: 1)必须是一棵搜索树:前提是二叉树,任取一个节点,它的左孩子的Key小于父亲节点的Key小于右孩子节点的Key,中序遍历是有序的,按照Key的大小进行排列,高度平衡的二叉…...

北斗高精度组合导航终端

UWB(Ultra-Wideband)、卫星定位(GNSS),以及IMU(Inertial Measurement Unit)的组合定位系统结合了多种传感器和定位技术,以提供高精度、高可靠性的位置估计。这种组合定位系统在各种应…...

低代码平台是否能替代电子表格?

在计算机技术普及之前,会计、助理或者是销售人员,都需要用纸和笔来记录和维护每一笔交易。计算机技术兴起之后,一项技术发明——电子表格的出现改变了低效的状况。电子表格的第一个版本出现在1977年,一个名为“VisiCalc”的程序。…...

qt多个信号如何关联一并处理

主要方法&#xff1a; 首先&#xff0c;需要创建一个包含自定义信号和槽的Qt类。假设要创建一个名为MyObject的类&#xff0c;并在其中定义一个自定义信号和一个槽。这个类的头文件可能如下所示&#xff1a; #ifndef MYOBJECT_H #define MYOBJECT_H#include <QObject>c…...

【python爬虫】12.建立你的爬虫大军

文章目录 前言协程是什么多协程的用法gevent库queue模块 拓展复习复习 前言 照旧来回顾上一关的知识点&#xff01;上一关我们学习如何将爬虫的结果发送邮件&#xff0c;和定时执行爬虫。 关于邮件&#xff0c;它是这样一种流程&#xff1a; 我们要用到的模块是smtplib和emai…...

2023数学建模国赛C题思路--蔬菜类商品的自动定价与补货决策

C 题 蔬菜类商品的自动定价与补货决策 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c;商超通常会根据各商品的历史销售和需 求情况每天进…...

vue2与vue3的使用区别

1. 脚手架创建项目的区别&#xff1a; vue2: vue init webpack “项目名称”vue3: vue create “项目名称” 或者vue3一般与vite结合使用: npm create vitelatest yarn create vite2. template中结构 vue2: template下只有一个元素节点 <template><div><div…...

Apache httpd漏洞复现

文章目录 未知后缀名解析漏洞多后缀名解析漏洞启动环境漏洞复现 换行解析漏洞启动环境漏洞复现 未知后缀名解析漏洞 该漏洞与Apache、php版本无关&#xff0c;属于用户配置不当造成的解析漏洞。在有多个后缀的情况下&#xff0c;只要一个文件含有.php后缀的文件即将被识别成PHP…...

【漏洞复现】时空智友企业流程化管控系统文件上传

漏洞描述 通过时空智友该系统,可让企业实现流程的自动化、协同上提升、数据得洞察及决策得优化,来提高工作效率、管理水平及企业的竞争力。时空智友企业流程化 formservice接口处存有任意文件上传漏洞,未经认证得攻击者可利用此接口上传后门程序,可导致服务器失陷。 免责…...

elasticsearch的DSL查询文档

DSL查询分类 查询所有&#xff1a;查询出所有数据&#xff0c;一般测试用。例如&#xff1a;match_all 全文检索&#xff08;full text&#xff09;查询&#xff1a;利用分词器对用户输入内容分词&#xff0c;然后去倒排索引库中匹配。例如&#xff1a; match_query multi_ma…...

IP地址、子网掩码、网络地址、广播地址、IP网段

文章目录 IP地址IP地址分类子网掩码网络地址广播地址IP网段 本文主要讨论iPv4地址。 IP地址 实际的 IP 地址是一串32 比特的数字&#xff0c;按照 8 比特&#xff08;1 字节&#xff09;为一组分成 4 组&#xff0c;分别用十进制表示然后再用圆点隔开&#xff0c;这就是我们平…...

ffmpeg-android studio创建jni项目

一、创建native项目 1.1、选择Native C 1.2、命名项目名称 1.3、选择C标准 1.4、项目结构 1.5、app的build.gradle plugins {id com.android.application }android {compileSdk 32defaultConfig {applicationId "com.anniljing.ffmpegnative"minSdk 25targetSdk 32…...

windows下vs 2015 libtorrent库的配置,vs2015下-boost-openssl-libtorrent的配置

libtorrent依赖OpenSSL和boost库&#xff0c;首先要编译Openssl和boost库。 1、安装ActivePerl&#xff0c;下载地址&#xff1a;网上找。 安装完后配置环境变量(一般安装成功后&#xff0c;环境变量就已经配置好了&#xff0c;如果没有配置自己配置环境变量)&#xff1a; …...

终极指南:如何用Word Checker轻松实现中英文拼写自动纠正

终极指南&#xff1a;如何用Word Checker轻松实现中英文拼写自动纠正 【免费下载链接】word-checker &#x1f1e8;&#x1f1f3;&#x1f1ec;&#x1f1e7;Chinese and English word spelling corrector.(中文易错别字检测&#xff0c;中文拼写检测纠正。英文单词拼写校验工具…...

[MAF的Agent管道详解-06]ChatClientAgent对IChatClient和输入输出增强管道的整合

上面我们介绍了与LLM交互的IChatClient管道、持久化对话消息的ChatHistoryProvider、以及实现输入和输出增强的AIContextProvider&#xff0c;接下来我们来看看ChatClientAgent是如何将它们整合在一起的。 1. ChatClientAgent的构建 如下面的代码片段所示&#xff0c;ChatClien…...

终极APK编辑指南:APK Editor Studio完整使用教程

终极APK编辑指南&#xff1a;APK Editor Studio完整使用教程 【免费下载链接】apk-editor-studio Powerful yet easy to use APK editor for PC and Mac. 项目地址: https://gitcode.com/gh_mirrors/ap/apk-editor-studio APK Editor Studio是一款功能强大且易于使用的A…...

从XML-RPC到gRPC:一个老派RPC协议如何影响了今天的微服务通信设计

从XML-RPC到gRPC&#xff1a;技术演进中的通信范式变迁 二十年前&#xff0c;当Dave Winer和Microsoft首次提出XML-RPC协议时&#xff0c;他们可能不会想到这个简单的远程调用机制会成为现代微服务架构的启蒙。在1998年的技术背景下&#xff0c;XML-RPC以其基于HTTP和XML的简洁…...

终极字体压缩指南:如何用Fontmin让网页字体加载快3倍

终极字体压缩指南&#xff1a;如何用Fontmin让网页字体加载快3倍 【免费下载链接】fontmin Minify font seamlessly 项目地址: https://gitcode.com/gh_mirrors/fo/fontmin Fontmin是一款基于纯JavaScript开发的字体压缩工具&#xff0c;能够将庞大的字体文件压缩成仅包…...

Unity开发笔记系列(协程)—— Coroutine continue failure报错

一、概述在开发中使用协程时遇到了Coroutine continue failure的报错&#xff0c;这个报错因为没有堆栈信息不好定位&#xff0c;虽然好像不影响运行&#xff0c;但为了不留隐患&#xff0c;还是查找资料解决了一下&#xff0c;特此记录。二、问题描述通过总结引发报错的代码&a…...

终极指南:3步快速掌握Reloaded-II游戏Mod加载器

终极指南&#xff1a;3步快速掌握Reloaded-II游戏Mod加载器 【免费下载链接】Reloaded-II Universal .NET Core Powered Modding Framework for any Native Game X86, X64. 项目地址: https://gitcode.com/gh_mirrors/re/Reloaded-II Reloaded-II是一款基于.NET Core开发…...

AI驱动的JMeter脚本生成:基于OpenAPI契约与作用域约束的DSL构建

1. 这不是“AI写脚本”&#xff0c;而是把JMeter从“手绘电路图”升级成“EDA自动布线”你有没有在凌晨两点&#xff0c;对着Postman里复制粘贴的27个接口参数发呆&#xff1f;一边点开Swagger文档截图&#xff0c;一边在JMeter里手动拖拽HTTP请求、填Header、加JSON提取器、设…...

从main.cc到五大视图:手把手拆解QGC的UI启动流程(附QML与C++交互实例)

从main.cc到五大视图&#xff1a;手把手拆解QGC的UI启动流程&#xff08;附QML与C交互实例&#xff09; 当你第一次打开QGroundControl&#xff08;QGC&#xff09;时&#xff0c;那个简洁而功能强大的界面背后&#xff0c;隐藏着一套精妙的启动机制。作为一款广泛应用于无人机…...