shader学习(4)

    xiaoxiao2025-04-04  14

    让立方体动起来。 1、C#代码

    using UnityEngine; using System.Collections; public class NewBehaviourScript : MonoBehaviour { void Update () { //手动构建的旋转矩阵 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; //mvp矩阵 //Matrix4x4 mvp = this.transform.localToWorldMatrix * Camera.main.projectionMatrix * Camera.main.worldToCameraMatrix * rm; //this.GetComponent<Renderer>().material.SetMatrix("mvp",mvp); this.GetComponent<Renderer>().material.SetMatrix("rm",rm); }}

    2、shader代码

    Shader "xxx/ddd" { SubShader { pass { CGPROGRAM #pragma vertex vert //顶点函数的重命名 #pragma fragment frag //片段函数的重命名 #include "unitycg.cginc" float4x4 mvp; //定义变量,用C#赋值 float4x4 rm; struct v2f { float4 pos:POSITION; }; v2f vert(appdata_base v) { v2f o; //o.pos = mul(mvp,v.vertex); //这里变化了 float4x4 m = mul(UNITY_MATRIX_MVP, rm); //用unity自己的MVP矩阵,我的有问题,原因不详。 o.pos = mul(m, v.vertex); return o; } fixed4 frag():COLOR { return fixed4(1,1,1,1); } ENDCG } } }

    将C#代码和shader都加到立方体上,然后运行程序,毕竟C#代码的update方法,在运行起来才有作用。

    转载请注明原文地址: https://ju.6miu.com/read-1297728.html
    最新回复(0)