原因:當(dāng)我們把頂點(diǎn)從裁剪空間投影到屏幕空間中嘹锁,需要進(jìn)行透視除法(Perspective Division)塌衰,就是用其次坐標(biāo)系的w分量去除以x、y伤塌、z分量,得到的坐標(biāo)叫做歸一化的設(shè)備坐標(biāo)(Normalized Device Coordinates),現(xiàn)在所有的坐標(biāo)都位于一個(gè)立方體內(nèi)轧铁,在OpenGL中每聪,x、y齿风、z的范圍為[-1,1]药薯,但是在DirectX中,x救斑、y的范圍值[-1,1],z的范圍卻是[0,1]童本。
解決辦法:
float screenZ;
#if (defined(SHADER_API_GLES) || defined(SHADER_API_GLES3)) && defined(SHADER_API_MOBILE)
screenZ = Linear01Depth((i.screenPos.z + 1.0f) * 0.5f);
#else
screenZ = Linear01Depth(i.screenPos.z);
#endif