码迷,mamicode.com
首页 > 其他好文 > 详细

Vertex&Frag

时间:2015-10-15 17:57:39      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:

Vertex&Frag 类型的Shader采用的是顶点计算和像素计算的着色器方式。

技术分享

如下图:先通过顶点着色器,计算模型的坐标和纹理,再传入像素着色器计算颜色值。

技术分享

*注意

_MainTex_ST 和 TransForm_Tex 是对应关系,计算纹理坐标的偏移和平铺。

裁剪空间的范围是[-1,1],也就是在经过MVP矩阵后,o.pos.x/ o.pos.w 以及o.pos.y/ o.pos.w 的范围都是[-1,1] 故可以将裁剪空间坐标转换为 相对屏幕位置的uv坐标,如下o.uv = float2(( o.pos.x/o.pos.w+1)*0.5,(o.pos.y/o.pos.w+1)*0.5);

 

 

源代码:

技术分享
 1 Shader "JQM/VertexAndFrag"                                            //文件名和路径
 2 {
 3     Properties                                                                        //属性
 4     {
 5         _MainTex ("Texture", 2D) = "white" {}
 6     }
 7     SubShader                                                                    
 8     {
 9 
10         Pass
11         {
12             CGPROGRAM                                                        //Vertex&Frag 类型的shader 采用Cg语言
13             #pragma vertex vert
14             #pragma fragment frag
15             
16             #include "UnityCG.cginc"
17 
18             sampler2D _MainTex;                                            //属性声明
19             float4 _MainTex_ST;
20 
21             struct appdata
22             {
23                 float4 vertex : POSITION;
24                 float2 uv : TEXCOORD0;
25             };
26 
27             struct v2f
28             {
29                 float4 pos:SV_POSITION;
30                 float2 uv : TEXCOORD0;
31             };
32 
33             
34             v2f vert (appdata v)                                                //顶点程序        
35             {
36                 v2f o;
37                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);        //模型视图投影矩阵,将模型坐标转到摄像机坐标,在投影到屏幕的坐标
38                 o.uv = TRANSFORM_TEX(v.uv, _MainTex);            //计算UV和贴图之间的值
39                 return o;
40             }
41             
42             fixed4 frag (v2f i) : COLOR                                        //片段程序,强制返回Color类型的颜色值
43             {
44                 // sample the texture
45                 fixed4 col = tex2D(_MainTex, i.uv);                    //纹理采样
46                 return col;
47             }
48             ENDCG
49         }
50     }
51 }
View Code

 

Vertex&Frag

标签:

原文地址:http://www.cnblogs.com/jqm304775992/p/4882667.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!