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的更多相关文章

  1. unity3d ppsspp模拟器中的post processing shader在unity中使用

    这个位置可以看到ppsspp的特殊处理文件位置来看看这些特效 用来测试的未加特效图片 ppsspp: 传说系列一生爱---英杰传说 最后的战士 aacolor 是关于饱和度,亮度,对比度,色调的调节, ...

  2. Unity中调用Windows窗口句柄以及根据需求设置并且解决扩展屏窗体显示错乱/位置错误的Bug

    问题背景: 现在在搞PC端应用开发,我们开发中需要调用系统的窗口以及需要最大化最小化,缩放窗口拖拽窗口,以及设置窗口位置,去边框等功能 解决根据: 使用user32.dll解决 具体功能: Unity ...

  3. Unity中使用Attribute

    Attribute是c#的语言特性 msdn说明如下: The Attribute class associates predefined system information or user-def ...

  4. 在Unity中使用UGUI修改Mesh绘制几何图形

    在商店看到这样一个例子,表示很有兴趣,他们说是用UGUI做的.我想,像这种可以随便变形的图形,我第一个就想到了网格变形. 做法1: 细心的朋友应该会发现,每个UGUI可见元素,都有一个‘Canvas ...

  5. Unity中使用WebView

    Unity中使用WebView @(设计) 需求,最近游戏中需要引入H5直播页面和更新比较频繁的赛事页面,需求包括:加密传参数.和Unity交互,在Unity框架下其实有几种方案: 内置函数Appli ...

  6. Unity中创建二维码

    在网络上发现了一个可以把字符串转换成二维码的dll,但是我们要怎么使用他呢.不废话,直接进入主题. 用到的引用 using UnityEngine;using ZXing;using ZXing.Qr ...

  7. 在Unity中创建可远程加载的.unity3d包

    在一个Unity项目中,发布包本身不一定要包括所有的Asset(译为资产或组件),其它的部分可以单独发布为.unity3d,再由程序从本地/远程加载执行,这部分不在本文讨论范围.虽然Unity并没有直 ...

  8. 【原创翻译】初识Unity中的Compute Shader

    一直以来都想试着自己翻译一些东西,现在发现翻译真的很不容易,如果你直接把作者的原文按照英文的思维翻译过来,你会发现中国人读起来很是别扭,但是如果你想完全利用中国人的语言方式来翻译,又怕自己理解的不到位 ...

  9. 【unity shaders】:Unity中的Shader及其基本框架

    shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...

随机推荐

  1. js基本类型,隐式转换,变量

    Js笔记(脚本语言 node.js) Js五种基本类型:数字,字符串,布尔,null,undefined: HTML结构,表现,行为分离. 变量命名规则: 以字母或[下划线开始($)]不推荐,后面跟上 ...

  2. Hbase rowkey设计+布隆过滤器+STORE FILE & HFILE结构

    Rowkey设计 Rowkey设计原则 Rowkey设计应遵循以下原则: 1.Rowkey的唯一原则 必须在设计上保证其唯一性.由于在HBase中数据存储是Key-Value形式,若HBase中同一表 ...

  3. [转]vs2010用 boost.python 编译c++类库 供python调用

    转自:http://blog.csdn.net/wyljz/article/details/6307952 VS2010建立一个空的DLL 项目属性中配置如下 链接器里的附加库目录加入,python/ ...

  4. WIN7X64SP1极限精简版by双心

     WIN7X64SP1极限精简版by双心 http://bbs.wuyou.net/forum.php?mod=viewthread&tid=405044&page=1&ext ...

  5. NFC应用于公交卡

    NFC应用于公交卡https://www.cnblogs.com/liuzhaoyzz/p/7115098.html 带有NFC功能的安卓手机可以给实体公交卡充值,手机虚拟公交卡现在有两种方案,一种是 ...

  6. 浅读官方代码--ActionManager

    用于管理节点的动作 { CCDirector* pDirector = CCDirector::sharedDirector(); //获得单例 pDirector->getActionMana ...

  7. 软件-集成开发环境:IDEA(Java 语言开发的集成环境)

    ylbtech-软件-集成开发环境:IDEA(Java 语言开发的集成环境) IDEA 全称IntelliJ IDEA,是用于java语言开发的集成环境(也可用于其他开发语言),IntelliJ在业界 ...

  8. Excel 二维数组(数据块)旋转/翻转技巧

    Excel 二维数组(数据块)旋转/翻转技巧 原创 2017-12-30 久石六 久石六 工作中遇到个问题,需要将Excel中的数据块或者说二维数组向右旋转90度,才能再加工处理.当然,不是旋转文本方 ...

  9. Deployment Descriptor Web.xml

    Deployment Descriptor部署描述符: - 部署描述符是要部署到Web容器或EJB容器的Web应用程序或EJB应用程序的配置文件. - 部署描述符应包含EJB应用程序中所有企业bean ...

  10. python网页爬虫开发之六-Selenium使用

    chromedriver禁用图片,禁用js,切换UA selenium 模拟chrome浏览器,此时就是一个真实的浏览器,一个浏览器该加载的该渲染的它都加载都渲染,所以爬取网页的速度很慢.如果可以不加 ...