您的位置:首页 > 移动开发 > Unity3D

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

2015-06-19 18:06 543 查看
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步结果,颜色偏绿才对啊,为什么?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: