渲染:从物体坐标系到世界坐标系
在unity中
实现一个对网格取法线的简单着色器并把法线向量设置为颜色向量以在屏幕上显示
Shader"Custom/MyShader"{
SubShader{
Pass{
#pragma vertex MyVertex
#pragma fragment MyFragment
#include "UnityCG.cginc"
struct VertexData
{
float4 position:POSITION;
float3 normal:NORMAL;
}
struct Interpolator{
float4 position:SV_POSITION;
float3 normal:TEXCOORD0;
}
Interpolator MyVertex(VertexData Data)
{
Interpolator OutPut;
OutPut.position = mul(UNITY_MATRIX_MVP,Data.position);//投影到屏幕上
OutPut.normal = Data.normal;
return Output;
}
float4 MyFragment(Interpolator input):SV_TARGET
{
return float4(input.normal*0.5 + 0.5,0);
}
}
}//屎一样的缩进格式
现在来测试一下着色器
完成后创建Material在场景中任意创建几个物体并任意平移,升缩,旋转变换后将material拖拽到物体上并将material的shader选项换为shader->Custom->MyShader。在场景中测试着色器效果。