Shader2.0 顶点着色器:
1. 计算顶点的位置变换
2.计算顶点的颜色。
坐标空间
物体空间:3D物体自己的坐标系空间
一般设计时,几何物体以中心为原点,人物以双脚为原点;
世界空间:3D物体在场景中的世界坐标,整个游戏场景的空间;
摄像机空间:以观察摄像机为原点的坐标系下的坐标空间;
投影成像:3D坐标转换到屏幕空间。
Unity坐标系转换
1.transform.localToWorldMatrix 局部转世界的矩阵;
2.transform.worldToLocalMatrix 世界坐标转局部坐标矩阵;
有以下模式可选MultiplyPoint、MultiplyPoint3x4、MultiplayVector 进行坐标系转换;
3.shader中左乘_World2Object矩阵来实现世界坐标转局部坐标变换;
4.shader中左乘_Object2World矩阵来实现局部转世界的转换;
5.UNITY_MATRIX_MV 基本转换矩阵 x 摄像机矩阵;
6.UNITY_MATRIX_MVP 基本转换矩阵 x 摄像机矩阵 x 投影矩阵;
7.UNITY_MATRIX_V 摄像机矩阵;
8.UNITY_MATRIX_P 投影矩阵(就是屏幕空间);
9.UNITY_MATRIX_VP 摄像机矩阵 x 投影矩阵;
10.UNITY_MATRIX_T_MV (基本变换矩阵 x 摄像机矩阵)转置矩阵;
11.UNITY_MATRIX_IT_MV (基本变换矩阵 x 摄像机矩阵)的逆转置矩阵;
12.UNITY_MATRIX_TEXTURE0 纹理变化矩阵;
Unity3d 里面 矩阵是左乘 (左手坐标系)
第一步 将 物体坐标系 转换到 世界 坐标系
P(世界) = M(物体到世界)*P(物体)
规律 : 首先 将 物体坐标系 变换 到 世界。
第二步 将 世界坐标 转换 到 相机坐标系。
P(相机) = M(世界到相机)*P(世界)
C# 编写:
// 左乘 转换到世界坐标系
// MultiplyPoint 左乘
Verctor3 posWord = transform.parent.localToWorldMatrix.MultiplyPint(transform.localPostion)
// 将本物体 转换到 以本物体父级对应的 世界坐标
public GameObject target;
// 表示 从 世界 转换到 对应(target)的父类下的 物体坐标系
Verctor3 targetPos = target.transform.worldToLocalMatrix.MultiplyPoint(posWord);
M: 物体坐标系 转换到 世界 坐标系
V: 世界坐标系 转换到 相机 坐标系
P: 将 3维 坐标系 转换成 2维屏幕坐标系