博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity之fragment shader中如何获得视口空间中的坐标
阅读量:5096 次
发布时间:2019-06-13

本文共 1853 字,大约阅读时间需要 6 分钟。

2种方法:

1. 使用 VPOS 或 WPOS语义,如:

Shader "Test/ScreenPos1"{    SubShader    {        Pass        {            CGPROGRAM            #pragma vertex vert            #pragma fragment frag                        struct appdata            {                float4 pos : POSITION;            };            struct v2f            {                float4 pos : SV_POSITION;            };            v2f vert (appdata v)            {                v2f o;                o.pos = mul(UNITY_MATRIX_MVP, v.pos);                return o;            }                        fixed4 frag (v2f i : WPOS) : SV_Target            {                fixed2 viewPos = i.pos.xy / _ScreenParams.xy;                return fixed4(viewPos, 0, 1);            }            ENDCG        }    }}
View Code

其中,VPOS/WPOS 的z分量范围为[0,1],在摄像机的近裁剪平面处,z值为0,在远裁剪平面处,z值为1。 

 

2. 使用 UnityCG.cginc 中的 ComputeScreenPos 方法,如:

Shader "Test/ScreenPos2"{    SubShader    {        Pass        {            CGPROGRAM            #pragma vertex vert            #pragma fragment frag            #include "UnityCG.cginc"            struct appdata            {                float4 pos : POSITION;                float4 scrPos : TEXCOORD0;            };            struct v2f            {                float4 pos : SV_POSITION;                float4 scrPos : TEXCOORD0;            };            v2f vert (appdata v)            {                v2f o;                o.pos = mul(UNITY_MATRIX_MVP, v.pos);                o.scrPos = ComputeScreenPos(o.pos);                return o;            }                        fixed4 frag (v2f i) : SV_Target            {                fixed2 viewPos = i.scrPos.xy / i.scrPos.w;                return fixed4(viewPos, 0, 1);            }            ENDCG        }    }}
View Code

 

详细参考《Unity shader入门精要》 91页。

转载请注明出处:

 

渲染结果如下:

转载于:https://www.cnblogs.com/jietian331/p/7025853.html

你可能感兴趣的文章
基本封装方法
查看>>
[Typescript] Specify Exact Values with TypeScript’s Literal Types
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
我眼中的技术地图
查看>>
lc 145. Binary Tree Postorder Traversal
查看>>
在centos上开关tomcat
查看>>
android dialog使用自定义布局 设置窗体大小位置
查看>>
ionic2+ 基础
查看>>
查询消除重复行
查看>>
[leetcode]Minimum Path Sum
查看>>
内存管理 浅析 内存管理/内存优化技巧
查看>>