Shader06 VertexShader MVP矩阵变换

 

public class MVPTransform : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update ()
    {

        //绕Y轴旋转的矩阵,跟C#中的不一样
        Matrix4x4 RM = new Matrix4x4();
        RM[0, 0] = Mathf.Cos(Time.realtimeSinceStartup);
        RM[0, 2] = Mathf.Sin(Time.realtimeSinceStartup);
        RM[1, 1] = 1;
        RM[2, 0] = -Mathf.Sin(Time.realtimeSinceStartup);
        RM[2, 2] = Mathf.Cos(Time.realtimeSinceStartup);
        RM[3, 3] = 1;

        //缩放矩阵
        Matrix4x4 SM = new Matrix4x4();
        SM[0, 0] = Mathf.Sin(Time.realtimeSinceStartup)/4+0.5f;
        SM[1, 1] = Mathf.Cos(Time.realtimeSinceStartup)/8+0.5f;
        SM[2, 2] = Mathf.Sin(Time.realtimeSinceStartup)/6+0.5f;
        SM[3, 3] = 1;


        //模型到世界,世界到相机,相机到投影,顺序不能变
        //Matrix4x4 mvp =Camera.main.projectionMatrix*Camera.main.worldToCameraMatrix* transform.localToWorldMatrix*RM;

        GetComponent<Renderer>().material.SetMatrix("sm",SM);
    }
}
Shader "Sbin/vf31" 
{
	SubShader 
	{	
		pass{		
		
			CGPROGRAM
			
			#pragma vertex vert
			#pragma fragment frag	 		
			
			//引用公用方法  Unity\Editor\Data\CGIncludes\sbin
			#include "unitycg.cginc"	
			
			float4x4 rm;//旋转矩阵
			float4x4 sm;//缩放矩阵
			float4x4 mvp;
			
			struct v2f
			{
				float4 pos: POSITION;
			};
		
			   
			v2f vert(appdata_base v)
			{
				v2f o;  

				//o.pos=mul(mvp,v.Vertex);

				//MVP变化  从模型到相机到投影   大部分用这个方法
				float4x4 m=mul(UNITY_MATRIX_MVP,sm);
				o.pos=mul(m,v.Vertex);//被变化的矩阵放右边
				
				return o;				 
			}


			fixed4 frag():COLOR
			{	
				retu fixed4(1,1,1,1);
			}	
			
			ENDCG
		}
	} 
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值