Unity着色器入门之一步一步来看坐标系变换

来源:互联网 发布:windows to go可以 编辑:程序博客网 时间:2024/05/21 06:01

1.首先,我们在Unity3D新建一个立方体,Reset一下它的transform组件。这时它的中心的世界坐标为(0,0,0)。共有8个顶点(其实是24个),它们世界坐标为正负0.5

1

2.新建一个脚本文件如下:

using UnityEngine;using System.Collections;public class TestCoordinateTransform : MonoBehaviour {void Start () {        Vector3 worldSpace=new Vector3(0.5f,0.5f,-0.5f);//取其中一个顶点世界坐标        Vector3 objSpace=transform.worldToLocalMatrix.MultiplyPoint(worldSpace);//将世界坐标转为模型坐标        print(objSpace);//打印看看        Vector3 viewSpace = Camera.main.worldToCameraMatrix.MultiplyPoint(worldSpace);//将世界坐标转为视坐标        print(viewSpace);        Matrix4x4 m=GL.GetGPUProjectionMatrix(Camera.main.projectionMatrix,true);//获取投影矩阵        Vector3 proSpace =m.MultiplyPoint(viewSpace);//将视坐标转为投影坐标        print(proSpace);}}
可以看出最后proSpace=(0,-0.1,0)


3.新建一个Shader,程序如下:

Shader "Custom/SolidColor" {SubShader {        Pass {            CGPROGRAM            #pragma vertex vert            #pragma fragment frag            #include "UnityCG.cginc"            float4 vert(appdata_base v) : POSITION {                return mul (UNITY_MATRIX_MVP, v.vertex);            }            fixed4 frag(float4 sp:SV_POSITION) : SV_Target {                return fixed4(sp.xy,0.0,1.0);            }            ENDCG        }    }}
将这个Shader赋值给那个立方体,结果如下:



但是按照第2步结果,颜色偏绿才对啊,为什么?

0 0