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
}
}
}