Unity中的屏幕坐标:ComputeScreenPos/VPOS/WPOS
【Unity中的屏幕坐标:ComputeScreenPos/VPOS/WPOS】
1、通过 VPOS / WPOS 语义获取。
VPOS 是 HLSL 中 对 屏幕 坐标 的 语义, 而 WPOS 是 Cg 中 对 屏幕 坐标 的 语义。
上面的Shader,得到的效果如图:
VPOS/ WPOS 的 z 分量 范围是[ 0, 1], 在 摄像机 的 近 裁剪 平面 处, z 值 为 0, 在 远 裁剪 平面 处, z 值 为 1。
对于 w 分量, 我们 需要 考虑 摄像机 的 投影 类型。 如果 使 用的 是 透视 投影, 那么 w 分量 的 范围是 [1/Near, 1/Far], Near 和 Far 对应 了 在 Camera 组件 中 设置 的 近 裁剪 平面 和 远 裁剪 平面 距离 摄像机 的 远近; 如果 使 用的 是 正交 投影, 那么 w 分量 的 值 恒 为 1。
2、通过 ComputeScreenPos 获取。
这个函数在 UnityCG.cginc 里被定义。
首先 在 顶点 着色 器 中将 ComputeScreenPos 的 结果 保存 在 输出 结构 体中。
然后 在 片 元 着色 器 中进 行 一个 齐 次 除法 运算 后 得到 视 口 空间 下 的 坐标。
视 口 空间 中的 坐标, 公式 如下:
上面 公式 的 思想 就是, 首先 对 裁剪 空间 下 的 坐标 进行 齐 次 除法, 得到 范围 在[ − 1, 1] 的 NDC, 然后 再将 其 映射 到 范围 在[ 0, 1] 的 视 口 空间 下 的 坐标。
ComputeScreenPos 的 输入 参数 pos 是 经过 MVP 矩阵 变换 后 在 裁剪 空间 中的 顶点 坐标。 UNITY_ HALF_ TEXEL_ OFFSET 是 Unity 在 某些 DirectX 平台 上 使 用的 宏, 在这里 我们 可以 忽略 它。 这样, 我们 可以 只 关注# else 的 部分。_ ProjectionParams. x 在 默认 情况下 是 1( 如果 我们 使用 了 一个 翻转 的 投影 矩阵 的 话 就是 − 1, 但这 种 情况 很 少见)。
参考:
1、《Unity Shader 入门精要》- 4.9.3
Unity中的屏幕坐标:ComputeScreenPos/VPOS/WPOS的更多相关文章
- unity3d ppsspp模拟器中的post processing shader在unity中使用
这个位置可以看到ppsspp的特殊处理文件位置来看看这些特效 用来测试的未加特效图片 ppsspp: 传说系列一生爱---英杰传说 最后的战士 aacolor 是关于饱和度,亮度,对比度,色调的调节, ...
- Unity中调用Windows窗口句柄以及根据需求设置并且解决扩展屏窗体显示错乱/位置错误的Bug
问题背景: 现在在搞PC端应用开发,我们开发中需要调用系统的窗口以及需要最大化最小化,缩放窗口拖拽窗口,以及设置窗口位置,去边框等功能 解决根据: 使用user32.dll解决 具体功能: Unity ...
- Unity中使用Attribute
Attribute是c#的语言特性 msdn说明如下: The Attribute class associates predefined system information or user-def ...
- 在Unity中使用UGUI修改Mesh绘制几何图形
在商店看到这样一个例子,表示很有兴趣,他们说是用UGUI做的.我想,像这种可以随便变形的图形,我第一个就想到了网格变形. 做法1: 细心的朋友应该会发现,每个UGUI可见元素,都有一个‘Canvas ...
- Unity中使用WebView
Unity中使用WebView @(设计) 需求,最近游戏中需要引入H5直播页面和更新比较频繁的赛事页面,需求包括:加密传参数.和Unity交互,在Unity框架下其实有几种方案: 内置函数Appli ...
- Unity中创建二维码
在网络上发现了一个可以把字符串转换成二维码的dll,但是我们要怎么使用他呢.不废话,直接进入主题. 用到的引用 using UnityEngine;using ZXing;using ZXing.Qr ...
- 在Unity中创建可远程加载的.unity3d包
在一个Unity项目中,发布包本身不一定要包括所有的Asset(译为资产或组件),其它的部分可以单独发布为.unity3d,再由程序从本地/远程加载执行,这部分不在本文讨论范围.虽然Unity并没有直 ...
- 【原创翻译】初识Unity中的Compute Shader
一直以来都想试着自己翻译一些东西,现在发现翻译真的很不容易,如果你直接把作者的原文按照英文的思维翻译过来,你会发现中国人读起来很是别扭,但是如果你想完全利用中国人的语言方式来翻译,又怕自己理解的不到位 ...
- 【unity shaders】:Unity中的Shader及其基本框架
shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...
随机推荐
- Python全栈之路----递归
alex博客中递归的博文 我之前确实没讲明白递归这个东西 递归就是在函数的运行过程中调用自己. 但递归不断调用自己是有限度的,默认限度为1000.函数不断被压进栈,当超过递归限度时会造成栈溢出 ...
- cordova网络情况检测插件使用:cordova-plugin-network-information
1. 添加插件 : cordova plugin add cordova-plugin-network-information 2. 调用方法: document.addEventListener(' ...
- linux kernel driver debug
1. print printk(): never pr_debug(): always good dev_dbg(): prefered when you have a struct device o ...
- 统一社会信用代码+组织机构代码 校验 python
转自: https://blog.csdn.net/warrah/article/details/69338912 https://blog.csdn.net/qq_37142340/article/ ...
- vue-demo(初级)
在使用WebStorm前把字符编码等等设置好! 使用WebStorm打开vue项目等待ide索引加载完成 注意要让WebStorm可以创建vue文件需要以下步骤: <template> & ...
- zabbix 与 nginx (五)
zabbix监控nginx的大概流程为: 1:被监控端的nginx开启stub_status模块 2:通过脚本的方式获取nginx的状态值 3:修改被监控端的配置文件,Userparameter= ...
- maven 项目使用本地jar
<dependency> <groupId>com.yeepay.g3</groupId> <artifactId>yop</artifactId ...
- C# 数据库
连接: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...
- 使用lite-server
进入项目根目录,执行下列步骤 安装lite-server npm install lite-server 新建配置文件bs-config.json bs-config.json中可以: 指定监听的端口 ...
- 源码:Java集合源码之:哈希表(二)
要想知道一个元素是否在数组或链表中,只能从前向后挨个对比,无论是数组还是链表,其对数据的查询表现都比较无力.在的二叉排序树中,还会将数据排序以进行二分查找,将时间复杂度从O(n)降低到O(lg n). ...